我就廢話不多說了,大家還是直接看代碼吧~
1
2
3
4
5
6
7
8
|
//自己copy試一下比什么都好 public static void main(String[] args) { String json = "[\"name\":\"value\",\"value1\"]" ; String t = json.replaceAll( "\\\"" , "" ); System.out.println( "去除雙引號和斜杠后:" +t); String replaceAll = t.replace( "[" , "" ).replace( "]" , "" ); System.out.println( "去除左右中括號后:" +replaceAll); } |
補充知識:java 替換json字符串中間的引號保留兩邊的引號,避免json校驗失敗
問題描述
解析爬取的json數據時,報如下錯誤:
1
2
3
4
5
6
7
8
9
10
11
|
com.alibaba.fastjson.JSONException: syntax error, position at 4164 , name mc at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java: 586 ) at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java: 1157 ) at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java: 476 ) at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java: 1327 ) at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java: 1293 ) at com.alibaba.fastjson.JSON.parse(JSON.java: 137 ) at com.alibaba.fastjson.JSON.parse(JSON.java: 128 ) at com.alibaba.fastjson.JSON.parseObject(JSON.java: 201 ) at com.nawang.crawl.GuizhouEnterpriseListCrawlAll2.crawlList(GuizhouEnterpriseListCrawlAll2.java: 210 ) at com.nawang.crawl.GuizhouEnterpriseListCrawlAll2.main(GuizhouEnterpriseListCrawlAll2.java: 85 ) |
問題原因
獲取到”d”名稱對應的所需結果
String allData = (String) JSONObject.parseObject(searchListStr).get("d");
調試時發現結果集 allData 字符串中間含有1個或多個雙引號(”)導致校驗失敗
{"mc":"崔記"純凈水經營部"},
{"mc":"貳+壹"休閑吧"},
{"mc":"富貴鳥"皮鞋經營店"},
{"mc":"紅萍果"窗簾"}
用在線JSON校驗格式化工具解析報錯:
第1行解析錯誤:
{"mc":"崔記"純凈水經營部"},{"mc":"貳+壹
----------^
期望是 'EOF', '}', ':', ',', ']'
將字符串中間的雙引號”去掉就符合JSON格式了,校驗成功。
解決方法
當然是想辦法如何去掉字符串中間的雙引號。
直接替換引號是不行的,名稱/值對全是雙引號括起來的,只是多了中間的雙引號。
最后想了個方法,利用名稱/值對的固定格式進行雙引號單引號替換,其余的雙引號替換為空,然后單引號替換回雙引號。原字符串如 :
{“mc”:”崔記”純凈水經營部”},{“mc”:”貳+壹”休閑吧”},…
1
2
3
4
5
6
7
8
9
10
11
|
String s = allData.replaceAll( "\\{\"" , "{'" ) // {" --> {' .replaceAll( "\":\"" , "':'" ) // ":" --> ':' .replaceAll( "\",\"" , "','" ) // "," --> ',' .replaceAll( "\":" , "':" ) // ": --> ': .replaceAll( ",\"" , ",'" ) // ," --> ,' .replaceAll( "\"\\}" , "'}" ) // "} --> '} .replaceAll( "\"" , "" ) // " --> 空,以去掉字符串中間的引號 .replaceAll( "'" , "\"" ) // ' --> ",所有的單引號替換回雙引號 .replaceAll( "<br />" , "" ) // 去掉字符串中的<br /> .replaceAll( "\\\\" , "?" ); // 字符串中含\也會導致解析失敗 JSONObject jsonData = JSONObject.parseObject(s); |
這樣處理后,JSON 解析成功。
以上這篇Java Json字符串的雙引號("")括號如何去掉就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/weixin_41124484/article/details/86489612