簡體   English   中英

如何去除json中導致json非法的雙引號?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM