json处理依赖:fastjson

问题:

对一个json字符串转换成fastjson中的JSONObject对象的时候如果该json字符串中带有多余的反斜杠,可能会导致解析失败;

举例:

//现有一个json字符串
String s = "{\"job\":{\"setting\":{\"restore\":{\"maxRowNumForCheckpoint\":0,\"isRestore\":false,\"restoreColumnName\":\"\",\"restoreColumnIndex\":0},\"errorLimit\":{\"record\":100},\"speed\":{\"bytes\":0,\"channel\":1}}}}";


//对该字符串做处理
JSONObject jsonObject = JSONObject.parseObject(s);
System.out.println(jsonObject);

这时候就会报错

这种简单的反斜杠处理有两种方式:

处理方法1:

简单粗暴去掉字符串中的反斜杠:

//现有一个json字符串
String s = "{\"job\":{\"setting\":{\"restore\":{\"maxRowNumForCheckpoint\":0,\"isRestore\":false,\"restoreColumnName\":\"\",\"restoreColumnIndex\":0},\"errorLimit\":{\"record\":100},\"speed\":{\"bytes\":0,\"channel\":1}}}}";


//解析前去除反斜杠,将反斜杠替换为空字符串
s = StringUtils.replace(s, "\\", "");

//对该字符串做处理
JSONObject jsonObject = JSONObject.parseObject(s);
System.out.println(jsonObject);

处理方法2:

解析前反转义一下

//现有一个json字符串
String s = "{\"job\":{\"setting\":{\"restore\":{\"maxRowNumForCheckpoint\":0,\"isRestore\":false,\"restoreColumnName\":\"\",\"restoreColumnIndex\":0},\"errorLimit\":{\"record\":100},\"speed\":{\"bytes\":0,\"channel\":1}}}}";


//解析前反转义该json字符串
s = StringEscapeUtils.unescapeJavaScript(s);

//对该字符串做处理
JSONObject jsonObject = JSONObject.parseObject(s);
System.out.println(jsonObject);

如果这两种方法都不行,或者说json中的反斜杠情况略微复杂,去除所有反斜杠后会让json字符串的本意发生变化的话,那可以试试下面的方法

处理方法3(上述两种方法不生效再考虑):

//现有一个json字符串
String s = "{\"job\":{\"setting\":{\"restore\":{\"maxRowNumForCheckpoint\":0,\"isRestore\":false,\"restoreColumnName\":\"\",\"restoreColumnIndex\":0},\"errorLimit\":{\"record\":100},\"speed\":{\"bytes\":0,\"channel\":1}}}}";


//解析前处理json字符串
 s = new String(s);

//对该字符串做处理
JSONObject jsonObject = JSONObject.parseObject(s);
System.out.println(jsonObject);
GitHub 加速计划 / js / json
61
5
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:2 个月前 )
d33ecd3f 8 天前
d19060e6 8 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐