[英]How to remove double quotes that result in illegal json in json?
我從服務器收到了一個json,這是不合法的,因為它包含一些意外的雙引號。
json 如下所示:
{
"result": {
"books": [{
"book_name": "All Around Weekly 04 - "Phantom," the Prairie Trapper"
}]
}
}
我把這個json不相關的部分刪掉了,保留了最關心的部分。
注意這一行:
"book_name": "All Around Weekly 04 - "Phantom," the Prairie Trapper"
book_name
的值是一個String
,但是All Around Weekly 04 - "Phantom," the Prairie Trapper
捕手里面有兩個不需要的雙引號,沒有轉義。
我希望服務器端做一些轉義,這樣我就可以獲取合法的 json。
其實服務端要我解決這個問題,乍一看很簡單。
但是,我還沒有找到找到目標雙引號的方法,導致json不合法。
我嘗試過的一種方法是:
public static String toJsonString(String s) {
char[] tempArr = s.toCharArray();
int tempLength = tempArr.length;
for (int i = 0; i < tempLength; i++) {
if (tempArr[i] == ':' && tempArr[i + 1] == '"') {
for (int j = i + 2; j < tempLength; j++) {
if (tempArr[j] == '"') {
if (tempArr[j + 1] != ',' && tempArr[j + 1] != '}') {
tempArr[j] = '\''; // replace double quotes with single quote.
} else if (tempArr[j + 1] == ',' || tempArr[j + 1] == '}') {
break;
}
}
}
}
}
return new String(tempArr);
}
它不適用於這種非法的 json:
{
"books": ["kotlin books", "java "books ""]
}
雖然我沒有遇到過這種 json,但我對此感到擔心。
我無法從數學上證明這一點,但我堅信這是不可能的。 對於您提出的每種啟發式方法,我很確定您也能夠提出一個模棱兩可的反例。
簡而言之:你需要回到服務的所有者那里,告訴他們要么需要給你一個完整的、明確的語法規范,說明他們自己開發的幾乎但不完全是 JSON 數據格式的語法,以便您可以為該數據格式實現解析器,或者使用已經存在的具有完整、明確規范的數據格式……例如JSON 。
舉一個容易出錯的例子:JSON 本身是為了成為 JavaScript / ECMAScript 的嚴格子集而創建的,特別是 JavaScript / ECMAScript Object Literal Syntax 的嚴格子集。 (意味着每個有效的 JSON 文檔同時也應該是有效的 JavaScript / ECMAScript 程序,特別是有效的 JavaScript / ECMAScript Object Literal。)並且 JSON 規范是由在編寫規范方面具有豐富經驗的人編寫的(以及編寫解析器)以及 JavaScript / ECMAScript 的豐富經驗。
然而,后來發現由於 JSON 規范中的一個微小疏忽,實際上可能存在非法 ECMAScript 程序的有效 JSON 文檔。 由於 JSON故意不包含版本,因此永遠無法更改,因此負責 ECMAScript 的 ECMA 技術委員會 39 實際上決定更改 ECMAScript,使其成為 ECMAScript 2019 中 JSON 的嚴格超集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.