解決JSON.parse轉(zhuǎn)化不規(guī)范json字符串的問題
JSON.parse轉(zhuǎn)化不規(guī)范json字符串問題
JSON.parse可以將一個json字符串轉(zhuǎn)化為一個json對象。但是該方法對json字符串的格式要求比較嚴格,如果json字符串不太規(guī)范,轉(zhuǎn)化就會報錯。常見錯誤有兩種:
1 json字符串中的key值沒有帶引號
key值不帶引號的json字符串無法使用該方法轉(zhuǎn)化,如下:
{ a:1 }
轉(zhuǎn)化報錯如下:
2 json字符串中的key值帶的單引號
如果json字符串中的key值帶的是單引號,也無法轉(zhuǎn)化,報錯相同,如下:
{ 'a':1 }
3 規(guī)范的json字符串格式
json字符串中所有的key值必須用雙引號包裹才能正常轉(zhuǎn)化為json對象。 如下:
{ "a":1, "b":"string", "c":[1,2,3] }
4 不規(guī)范json字符串的轉(zhuǎn)化方法
前提是,保證json字符串?dāng)?shù)據(jù)是正確的,只不過是key沒有用雙引號包圍,像上面提到的兩點。然后可以使用eval函數(shù)進行轉(zhuǎn)化,如下:
eval("({a:1})") eval("({'a':1})")
字符串轉(zhuǎn)json(JSON.parse報錯)
后端返回字符串類型的數(shù)組對象格式,js不能使用JSON.parse直接轉(zhuǎn),否則會報錯
問題
字符串格式不是很完美,導(dǎo)致JSON.parse轉(zhuǎn)換失敗。JSON.parse()方法對字符串的格式要求極其嚴格。一點格式錯誤都不能有,否則就報異常。
解決方法(此方法可解析不規(guī)范格式)
let str = "[{sec: 1, result: '123'}]" let arr = eval('(' + val + ')') console.log(arr)//[{sec: 1, result: '123'}] 此時已轉(zhuǎn)化為json格式
類型 | $parseJSON(需配合jquery使用) | JSON.parse | eval |
---|---|---|---|
方法說明 | jquery的方法。將符合標準格式的的JSON字符串轉(zhuǎn)為與之對應(yīng)的JavaScript對象 | 只能解析屬性名是雙引號包裹的字符串對象 | 可將一個JavaScript代碼字符串求值成特定的對象 |
主要區(qū)別 | 字符串必須用雙引號括起來 | 必須嚴格遵守json字符串格式;屬性名稱必須用雙引號包裹; | 字符串必須用雙引號括起來。 |
使用場景 | 能用JSON.parse的都可以用這個 | json字符串必須嚴格符合json格式??梢杂迷诤蠖藗鬟f給前端數(shù)據(jù)格式的使用使用。對數(shù)據(jù)的嚴謹性可以 | 格式不規(guī)范的時候,當(dāng)你不能確認對方的數(shù)據(jù)格式是不是很嚴謹?shù)臅r候 |
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
js動態(tài)控制table的tr、td增加及刪除的具體實現(xiàn)
這篇文章主要介紹了使用js如何動態(tài)控制table的tr,td增加及刪除,需要的朋友可以參考下2014-04-04JavaScript加入收藏夾功能(兼容IE、firefox、chrome)
這篇文章主要介紹了JavaScript加入收藏夾功能,兼容IE、firefox、chrome,并解決了window.sidebar.addPanel is not a function問題,需要的朋友可以參考下2014-05-05深入分析escape()、encodeURI()、encodeURIComponent()的區(qū)別及示例
這篇文章主要介紹了escape()、encodeURI()、encodeURIComponent()的區(qū)別,需要的朋友可以參考下2014-08-08