JSON到JSON转换的把手:保留值类型

问题描述

我正在做一些JSON到JSON的转换(如“ JSON for work”一书中所述)。它运行良好,但是:我使用迭代器,因为我的数据可以非常灵活。尽管所讨论的值通常是字符串,但有时不是。问题是字符串周围的引号没有保留。输入示例(缩短):

{
    "pid": "tmp/test/-1190688899","entries": {
        "21.T11148/397d831aa3a9d18eb52c": [
            {
                "key": "21.T11148/397d831aa3a9d18eb52c","value": "2020-09-16T09:31:39.486+00:00"
            }
        ]
    }
}

我想做的是仅在事先有引号的情况下才添加引号(或首先保留引号)。这可能吗?

让我告诉你到目前为止我做了什么。这是模板:

{
  "pid": "{{pid}}",{{#each entries}}
  "{{@key}}": [
    {{#each this}}
    {{{maybeStringify value}}}{{#unless @last}},{{/unless}}
    {{/each}}
  ]{{#unless @last}},{{/unless}}
  {{/each}}
}

因此,我创建了一个帮助程序“ maybeStringify ”(使用handlebars.java),该程序试图将该值转换为数字,如果该值不起作用并且该字符串不是以'{ '我再次添加引号,因此它返回有效的json。否则,内容将保持不变。您可以想象,这种解决方法在极少数情况下可能会失败。

this.hb.registerHelper("maybeStringify",new Helper<String>() {
            public CharSequence apply(String thing,Options options) {
                boolean isInteger = false;
                boolean isFloat = false;
                try {
                    Integer.parseInt(thing);
                    isInteger = true;
                } catch (Exception e) {
                    isInteger = false;
                }
                try {
                    Float.parseFloat(thing);
                    isFloat = true;
                } catch (Exception e) {
                    isFloat = false;
                }
                boolean isNumber = isInteger || isFloat;
                boolean isObject = thing.length() > 0 && thing.charat(0) == '{';
                boolean isstring = !isNumber && !isObject;
                if (isstring) {
                    thing = String.format("\"%s\"",thing);
                }
                return new Handlebars.SafeString(thing);
            }
        });

有什么想法吗?例如,这将有助于在帮助程序中获取值的JSON值类型。或者只是保留引号。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)