解決JSON.parse轉(zhuǎn)化不規(guī)范json字符串的問(wèn)題
JSON.parse轉(zhuǎn)化不規(guī)范json字符串問(wèn)題
JSON.parse可以將一個(gè)json字符串轉(zhuǎn)化為一個(gè)json對(duì)象。但是該方法對(duì)json字符串的格式要求比較嚴(yán)格,如果json字符串不太規(guī)范,轉(zhuǎn)化就會(huì)報(bào)錯(cuò)。常見(jiàn)錯(cuò)誤有兩種:
1 json字符串中的key值沒(méi)有帶引號(hào)
key值不帶引號(hào)的json字符串無(wú)法使用該方法轉(zhuǎn)化,如下:
{
a:1
}轉(zhuǎn)化報(bào)錯(cuò)如下:

2 json字符串中的key值帶的單引號(hào)
如果json字符串中的key值帶的是單引號(hào),也無(wú)法轉(zhuǎn)化,報(bào)錯(cuò)相同,如下:
{
'a':1
}
3 規(guī)范的json字符串格式
json字符串中所有的key值必須用雙引號(hào)包裹才能正常轉(zhuǎn)化為json對(duì)象。 如下:
{
"a":1,
"b":"string",
"c":[1,2,3]
}
4 不規(guī)范json字符串的轉(zhuǎn)化方法
前提是,保證json字符串?dāng)?shù)據(jù)是正確的,只不過(guò)是key沒(méi)有用雙引號(hào)包圍,像上面提到的兩點(diǎn)。然后可以使用eval函數(shù)進(jìn)行轉(zhuǎn)化,如下:
eval("({a:1})")
eval("({'a':1})")

字符串轉(zhuǎn)json(JSON.parse報(bào)錯(cuò))
后端返回字符串類(lèi)型的數(shù)組對(duì)象格式,js不能使用JSON.parse直接轉(zhuǎn),否則會(huì)報(bào)錯(cuò)
問(wèn)題
字符串格式不是很完美,導(dǎo)致JSON.parse轉(zhuǎn)換失敗。JSON.parse()方法對(duì)字符串的格式要求極其嚴(yán)格。一點(diǎn)格式錯(cuò)誤都不能有,否則就報(bào)異常。

解決方法(此方法可解析不規(guī)范格式)
let str = "[{sec: 1, result: '123'}]"
let arr = eval('(' + val + ')')
console.log(arr)//[{sec: 1, result: '123'}] 此時(shí)已轉(zhuǎn)化為json格式
| 類(lèi)型 | $parseJSON(需配合jquery使用) | JSON.parse | eval |
|---|---|---|---|
| 方法說(shuō)明 | jquery的方法。將符合標(biāo)準(zhǔn)格式的的JSON字符串轉(zhuǎn)為與之對(duì)應(yīng)的JavaScript對(duì)象 | 只能解析屬性名是雙引號(hào)包裹的字符串對(duì)象 | 可將一個(gè)JavaScript代碼字符串求值成特定的對(duì)象 |
| 主要區(qū)別 | 字符串必須用雙引號(hào)括起來(lái) | 必須嚴(yán)格遵守json字符串格式;屬性名稱(chēng)必須用雙引號(hào)包裹; | 字符串必須用雙引號(hào)括起來(lái)。 |
| 使用場(chǎng)景 | 能用JSON.parse的都可以用這個(gè) | json字符串必須嚴(yán)格符合json格式??梢杂迷诤蠖藗鬟f給前端數(shù)據(jù)格式的使用使用。對(duì)數(shù)據(jù)的嚴(yán)謹(jǐn)性可以 | 格式不規(guī)范的時(shí)候,當(dāng)你不能確認(rèn)對(duì)方的數(shù)據(jù)格式是不是很?chē)?yán)謹(jǐn)?shù)臅r(shí)候 |
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
小程序使用wxs解決wxml保留2位小數(shù)問(wèn)題
這篇文章主要介紹了小程序使用wxs解決wxml保留2位小數(shù)問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
前端實(shí)現(xiàn)docx文件預(yù)覽的3種方式舉例及分析
這篇文章主要介紹了前端實(shí)現(xiàn)docx文件預(yù)覽的3種方式,三種方式分別是docx-preview、vue-office和mammoth,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2025-03-03
Jquery把獲取到的input值轉(zhuǎn)換成json
本篇文章主要介紹了Jquery把獲取到的input值轉(zhuǎn)換成json的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-05-05
javascript頁(yè)面渲染速度測(cè)試腳本分享
這篇文章主要介紹了javascript頁(yè)面渲染速度測(cè)試腳本,計(jì)算瀏覽器渲染HTML頁(yè)面所需要的時(shí)間,需要的朋友可以參考下2014-04-04
關(guān)于JS Lodop打印插件打印Bootstrap樣式錯(cuò)亂問(wèn)題的解決方案
關(guān)于Lodop打印是個(gè)很牛的打印插件,但是打印Bootstrap的樣式的時(shí)候就容易錯(cuò)亂,下面通過(guò)本文給大家分享下這方面的問(wèn)題2016-12-12
JavaScript數(shù)據(jù)結(jié)構(gòu)與算法
這篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)與算法,文章圍繞主題展開(kāi)數(shù)據(jù)結(jié)構(gòu)與算法的概念,以及幾種常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)是什么,有什么優(yōu)點(diǎn)和缺,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07
JS 用6N±1法求素?cái)?shù) 實(shí)例教程
顯然,當(dāng)N≥1時(shí),6N,6N+2,6N+3,6N+4都不是素?cái)?shù),只有形如6N+1和6N+5的自然數(shù)有可能是素?cái)?shù)。所以,除了2和3之外,所有的素?cái)?shù)都可以表示成6N±1的形式(N為自然數(shù))。2009-10-10

