问题描述
我正在做一些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 (将#修改为@)