一、问题说明
通常情况下,我们遇到的都是比较简单的json格式,如:
{"aa":"11","bb":"22"}
我碰到过一个稍微复杂点的json格式,如:
{"params":"{\"name\":\"zhangsan\",\"id\":\"101\",\"token\":\"123456\"}"}
这里说下,我的目标是解析成这种形式 算ok
看到上面这个格式,有人会有疑问,这是标准的json数据格式吗?当然不是,因为前端其实是解析不了的。我为什么要这样表达这个格式呢?因为我造的数据,打印的结果就是这样,我先贴过来,代码如下:
我的前端代码中接到的是下面这样的数据,看上去似乎是正常的json格式,但是依然无法正常解析
二、解决问题
这里要用到commons.lang3里的一个方法:StringEscapeUtils.escapeJson(用来对json字符串进行转义)
回到前面的问题
{\"params\":\"{\\\"name\\\":\\\"zhangsan\\\",\\\"id\\\":\\\"101\\\",\\\"token\\\":\\\"123456\\\"}\"}
我们把转义后的结果放到chrome控制台再试下,发现解析成功了
参考链接:https://blog.csdn.net/chenleixing/article/details/43456987
附测试数据生成代码:
import net.sf.json.JSONObject;
import org.apache.commons.lang3.StringEscapeUtils;
import java.util.HashMap;
import java.util.Map;
public class MyTest {
public static void main(String[] args) {
JSONObject jsonObject = new JSONObject();
jsonObject.element("id", "101");
jsonObject.element("name", "zhangsan");
jsonObject.element("token", "123456");
Map<String, String> params = new HashMap<>();
params.put("params", jsonObject.toString());
String paramStr = JSONObject.fromObject(params).toString();
System.out.println(paramStr);
paramStr = StringEscapeUtils.escapeJson(paramStr); // 转义
System.out.println(paramStr);
}
}