我们使用Freemarker将一个JSON转换为另一个JSON。输入JSON是这样的:
{"k1": "a", "k2":"line1. \n line2"}
使用Freemarker模板发布后,JSON将转换为:
{ \n\n "p1": "a", \n\n "p2": "line1. \n line2"}
以下是我们用于进行转换的逻辑
final Map<String, Object> input = JsonConverter.convertFromJson(input, Map.class);
final Template template = freeMarkerConfiguration.getTemplate("Template1.ftl");
final Writer out = new StringWriter();
template.process(input, out);
out.flush();
final String newlineFilteredResult = new JSONObject(out.toString).toString();
由于密钥k2的字符串中有换行符,转换为JSON对象失败,并给出以下异常:
Caused by: org.json.JSONException: Unterminated string at ...
我尝试使用以下但没有任何作用:
1. JSONObject.quote
2. JSONValue.escape
3. out.toString()。replaceAll(“[\ n \ r] +”,“\\ n”);
由于开头的换行符,我得到以下异常:
Caused by: org.json.JSONException: Missing value at 1 [character 2 line 1]
有人可以指出我正确的方向。
答案 0 :(得分:1)
在OP进一步澄清之后,他的自由标记模板中有"${key}": "${value}"
,而${value}
可能包含线刹。在这种情况下,解决方案是使用${value?json_string}
。