String jsonStr = "{\"reg\":\"(\\.|\\?){3,}\"}";
JSON.parseObject(jsonStr);
对以上这种JSON数据进行反序列化时会报错:
com.alibaba.fastjson.JSONException: unclosed string : .
at com.alibaba.fastjson.parser.JSONLexerBase.scanString(JSONLexerBase.java:989)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:469)
at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1367)
at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1333)
at com.alibaba.fastjson.JSON.parse(JSON.java:152)
at com.alibaba.fastjson.JSON.parse(JSON.java:162)
at com.alibaba.fastjson.JSON.parse(JSON.java:131)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:223)
jsonStr这个字符串的System.out.println()结果是:{"reg":"(\.|\?){3,}"}
怎么处理呢?使用的版本是1.2.56
我尝试了以下这个json库在反序列化时没有问题
net.sf.json.JSONSerializer.toJSON(jsonStr)
不过它的做法是删除其中的“\”符号,反序列化后的JSON再序列化后,字符串会变为:
{"reg":"(.|?){3,}"}
3条答案
按热度按时间ki1q1bka1#
应该这样吧
String jsonStr = "{"reg":"(\.|\?){3,}"}";
JSON.parseObject(jsonStr);
7gcisfzg2#
同 #2325
cfh9epnr3#
@edwardpan 反斜杠
\
,每被双引号包一层,就需要转义一次,上面的正则表达式被两层引号包起来了,因此如果想要表达单个\
,则在引号内应该是"\"\\\\\""
。对于"{\"reg\":\"(\\.|\\?){3,}\"}"
,处理的时候变成了对符号.
进行转义,因此会报错。应该输入如下字符串:输出为:
{"reg":"(\\.|\\?){3,}"}