json字符串的值中包含反斜杠
{
"image": "imageUrl",
"sku": "A301",
"name": "无痕直发接发片24\"化纤高温丝发帘-2#自然黑",
"status": "有货"
}
其实它在字符串里面是这样显示的
String s = "{\"image\":\"imageUrl\",\"sku\":\"A301\",\"name\":\"无痕直发接发片24\\\"化纤高温丝发帘-2#自然黑\",\"status\":\"有货\"}"
JSON.parseObject("{\"image\":\"imageUrl\",\"sku\":\"A301\",\"name\":\"无痕直发接发片24\\\"化纤高温丝发帘-2#自然黑\",\"status\":\"有货\"}", Test.class);
执行JSON解析会报如下错误:
com.alibaba.fastjson.JSONException: unclosed.str.lits
at com.alibaba.fastjson.parser.JSONLexerBase.readString(JSONLexerBase.java:4892)
at com.alibaba.fastjson.parser.JSONScanner.scanFieldString(JSONScanner.java:1012)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:567)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseRest(JavaBeanDeserializer.java:1576)
at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_1_BaiduSearchImageInfoVO.deserialze(Unknown Source)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:284)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:688) at com.alibaba.fastjson.JSON.parseObject(JSON.java:396)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:300)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:573)
StringEscapeUtils.unescapeJava(s)
public void test_11(){
try {
String s = "{"image":"imageUrl","sku":"A301","name":"无痕直发接发片24\"化纤高温丝发帘-2#自然黑","status":"有货"}";
System.out.println(s);
String s1 = StringEscapeUtils.unescapeJava(s);
System.out.println("s1:" + s1);
String s2 = StringUtility.toJsonString(s1);
System.out.println("s2:" + s2);
} catch (Exception e) {
e.printStackTrace();
}
}
得出结果如下:
s:{"image":"imageUrl","sku":"A301","name":"无痕直发接发片24\"化纤高温丝发帘-2#自然黑","status":"有货"}
s1:{"image":"imageUrl","sku":"A302","name":"无痕直发接发片24"化纤高温丝发帘-2#自然黑","status":"有货"}
s2:{"image":"imageUrl","sku":"A303","name":"无痕直发接发片24”化纤高温丝发帘-2#自然黑","status":"有货"}
这样就达到去除反斜杠的效果了, 从而执行 JSON.parseObject("{"image":"xxx.jpg","sku":"A301","name":"IPhone11\"5G","status":"有货"}", Test.class) 也不会报错了