转义JSON对象中的字符串

时间:2017-08-17 01:41:45

标签: json escaping freemarker


我们使用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]

有人可以指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

修改

在OP进一步澄清之后,他的自由标记模板中有"${key}": "${value}",而${value}可能包含线刹。在这种情况下,解决方案是使用${value?json_string}