亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 JSON.parse() 會刪除字符串中存在的一些屬性?

為什么 JSON.parse() 會刪除字符串中存在的一些屬性?

汪汪一只貓 2023-09-28 09:48:09
我注意到在我的客戶端代碼中,我的服務響應缺少一些(但不是全部)屬性。當我查看 Chrome 中的開發工具“網絡”選項卡時,我發現服務響應似乎包含這些缺失的屬性,但從 Angular http 客戶端返回的對象卻沒有。因此,出于調試目的,我嘗試配置我的 http 客戶端請求選項,將響應正文解釋為文本并返回字符串并記錄它。然后我做了一個 JSON.parse(responseText) 。記錄的responseText具有我期望的全套屬性,但JSON.parse失敗并出現意外的令牌異常。因此,在發現一些轉義反斜杠似乎導致解析問題后,我嘗試在響應和解析之間注入 JSON.stringify 。我還記錄了字符串化響應,它仍然顯示了全套預期屬性。添加 stringify 后 JSON.parse 也通過了。但是,JSON.parse 導致原來丟失的屬性被刪除。在這種情況下我沒有收到解析錯誤。只是缺少一些屬性。源字符串中第一個缺失的屬性是一個名為 id 的簡單屬性,其中包含 UUID 字符串值。它后面的三個屬性也丟失了。{"a": "A","b": "B","c": "C", "id": "726abb0e-6cc6-4496-94a2-906439c06a30","1": 12345,"2": "stringVal","3": "stringValue"}解析這個字符串的結果是{"a": "A","b": "B","c": "C"}完整的 JSON 要復雜得多,我在這里包含的是一個包含多個此類類型的數組中的單個實例。數組中的所有實例都缺少相同的屬性。因此它不會停止解析完整的 json,并且仍然解析數組中的其他實例。
查看完整描述

3 回答

?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

事實證明,我的問題的真正答案是解析并沒有排除某些屬性。相反,我被 Chrome 中的控制臺語句誤導了。我的經歷是,控制臺日志僅評估在日志中展開時記錄的對象的狀態。我假設它代表寫入日志條目時的狀態。發生的情況是,稍后在代碼中修改引用,并且當我在其他代碼對對象進行更改后讀取它時,控制臺反映了更改后的對象引用。感謝所有閱讀本文并提供任何建議的人,但我擔心我自己對其工作原理的誤解才是問題的真正原因。



查看完整回答
反對 回復 2023-09-28
?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

原因是 JSON.parse 對于特殊字符無法正常工作。解決方案如下:


function escapeUnicode(str) {

    return str.replace(/[^\0-~]/g, function(ch) {

        return "\\u" + ("0000" + ch.charCodeAt().toString(16)).slice(-4);

    });

}


查看完整回答
反對 回復 2023-09-28
?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

我不確定為什么您只得到部分返回,但您的 JSON 字符串看起來無效。您需要在、和屬性:后添加冒號。以下內容應該正確解析。"a""b""c"


{

"a": "A",

"b": "B",

"c": "C", 

"id": "726abb0e-6cc6-4496-94a2-906439c06a30",

"1": 12345,

"2": "stringVal",

"3": "stringValue"

}


查看完整回答
反對 回復 2023-09-28
  • 3 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號