在输出json的key/value字符串时,由于value中含有"\r\n\r\n"字符串,导致提示json格式错误,具体如下:
[{\"testa\":\"testc\"},{\"key\":\"value\r\n\r\nend\"}]
提示:
... { "key": "valueend" }]
----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
请问哪位碰到过类似问题?应该怎样才能输出正确的结果?
对这些值进行转义。
另外检查下你的引号括号有没有闭合。
[{\"testa\":\"testc\"},{\"key\":\"value\r\n\r\nend\"}]
拼成
[{\"testa\":\"testc\"},{\"key\":\"value\\r\\n\\r\\nend\"}]
待解析的JSON字符串中如果有特殊字符如\r\n,则应该在解析之前先替换掉,然后再解析。
可以根据JSON数据的作用来替换\r\n,例如如果是浏览器需要展示的数据可以替换成
换行;如果是普通数据则替换为空串或者空格。
示例代码:
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JosnTestMain {
public static void main(String[] args) {
String t = "[{\"testa\":\"testc\"},{\"key\":\"value\r\n\r\nend\"}]";
t = t.replaceAll("\r\n", "<br/>");
JSONArray array = JSONArray.fromObject(t);
for(int i = 0;i<array.size();i++){
JSONObject object = array.getJSONObject(i);
if(object.containsKey("key")){
System.out.println(object.get("key"));
}
}
}
}
是的,转换成显示端换行格式就行了,例如网页就是 < br>就可以了