一、背景
需求:极光推送的数据,解析Json数据并做弹窗展示。
问题:原本后台传给极光的是正常的Json数据,然后经过极光处理后,整个Json数据都带有反斜杠。
{"linkurl":null,"type":10,"keyword":"[{\"name\":\"\\u606d\\u8d3a\\u65b0\\u6625\",\"value\":\"5888\",\"unit\":\"\\u5143\",\"catid\":\"3\"},{\"name\":\"\\u5409\\u7965\\u5982\\u610f\",\"value\":\"6.66\",\"unit\":\"%\",\"catid\":\"1\"},{\"name\":\"\\u5409\\u661f\\u9ad8\\u7167\",\"value\":\"58\",\"unit\":\"\\u5143\",\"catid\":\"3\"},{\"name\":\"\\u5409\\u7965\\u5982\\u610f\",\"value\":\"4.8\",\"unit\":\"%\",\"catid\":\"1\"},{\"name\":\"\\u5409\\u661f\\u9ad8\\u7167\",\"value\":\"12\",\"unit\":\"\\u5143\",\"catid\":\"3\"}]"}
keyword中好多反斜杠“\”并且还有Unicode的\\u606d\\u8d3a\\u65b0\\u6625\
二、接下来
只要Json解析必然抛出异常JsonSyntaxException,那么有问题自然要解决;
看到这么多反斜杠,当然要想办法清掉,首先,我们拿到keyword,
JSONObject extraJson = new JSONObject(extra);
String keyWord = extraJson.optString("keyword");
然后,replace("\\\"", "\"")将 \" 换成 " ,\\u还要再替换掉,replace("\\\\u", "\\u"),经过两轮的替换,终于还原成正常的Json了
最后还要将keyword拼接成Json:"{\"keyword\":" + keyWord + "}"