簡體   English   中英

JSON 解析偶爾會在解析字符串時出錯

[英]JSON parse gives error occasionally on parsing string

我有相同的輸入字段,用戶可以在其中輸入一些數據。 接下來,我的代碼將其轉換為 JSON 並將其發送到服務器。

$("#submit").click(function(){
    var inp = $("#inpTxt").val();

    if(inp == null || inp == ""){
        return;
    }

    jsonResult = JSON.parse('{"data": "' + inp + '"}');

    $.ajax({
        data : jsonResult,
        ...
    });
});

這里的問題是有時上面的代碼有效,有時卻不起作用。 大多數時候,我測試了代碼,它就像一個魅力,但在生產中,我不斷收到多次報告的錯誤。

我還沒有弄清楚可能的原因。

注意:代碼的某些部分在上面沒有共享,而只是問題的一部分。

根據最后一條評論,當有人在輸入中輸入一些轉義字符時,問題似乎發生了(@Noob46 確定了使用“Something”案例的情況,但在我看來,如果任何其他轉義字符,如 \\ 或任何其他開頭與 \\ 也可能導致同樣的問題)。

因此,處理此問題的一種方法是在將傳入的輸入字符串傳遞給 JSON.parse 之前對其進行過濾。

為了更進一步,我創建了一些 js,您可以在此處找到它們,如果它們作為輸入的一部分出現,實際上可以讓您處理轉義字符。

有關更多詳細信息,請參閱此處提供的鏈接中的附加代碼和示例。

由於我確定的問題,所以讓我也在這里陳述一個答案。 您只需要在遇到的所有轉義字符之前添加一個額外的 \\ ,例如:

\\b : 退格

\\f : 換頁

\\n : 換行

\\r : 回車

\\t : 水平制表符

\\v : 垂直制表符 " : 雙引號 \\ : 反斜杠

您可以通過以下代碼執行此操作:

inp = inp.replace('"','\\\"');

或者inp.replace('\\','\\\\\\\\');

其他角色依此類推。

當您使用 JSON.Parse 函數時,您需要自己處理特殊字符。 因此,如果有人在您的 inpTxt 輸入中放入 " ,則會導致解析該字符串時出錯。

您應該執行類似以下代碼的操作以避免解析錯誤並讓 javascript 正確處理字符串中的特殊字符。

jsonResult = { data: inp };

我創建了一個 JS 小提琴以使其更容易理解。 https://jsfiddle.net/ub3w0a8x/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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