js如何將多個(gè)json結(jié)構(gòu)組成的字符串轉(zhuǎn)換為數(shù)組?
接口返回的EventStream結(jié)構(gòu)的數(shù)據(jù),由于http流式傳輸時(shí),可能會分段,所以導(dǎo)致本該每次返回一段json數(shù)據(jù)結(jié)構(gòu)的字符串,變成了多個(gè)json數(shù)據(jù)結(jié)構(gòu)的字符串拼接在了一起。本文講述js如何將多個(gè)json結(jié)構(gòu)組成的字符串轉(zhuǎn)換為數(shù)組。
自定義函數(shù)
例如:
'{a: 1}{a: 2}{a: 3}'
想要得到這種的:
[{a: 1}, {a: 2}, {a: 3}]
函數(shù)實(shí)現(xiàn):支持深層嵌套的json結(jié)構(gòu)
function parseMultiJson(jsonStr) { const jsonArr = []; let startIndex = 0; let endIndex = 0; while (startIndex < jsonStr.length) { // 找到一個(gè) JSON 對象的開始位置 startIndex = jsonStr.indexOf('{', startIndex); if (startIndex === -1) { break; } // 找到一個(gè) JSON 對象的結(jié)束位置 let openBrackets = 1; endIndex = startIndex + 1; while (openBrackets > 0 && endIndex < jsonStr.length) { if (jsonStr[endIndex] === '{') { openBrackets++; } else if (jsonStr[endIndex] === '}') { openBrackets--; } endIndex++; } // 將該 JSON 對象解析為一個(gè)對象,并添加到數(shù)組中 const json = jsonStr.substring(startIndex, endIndex); jsonArr.push(JSON.parse(json)); // 更新下一個(gè) JSON 對象的開始位置 startIndex = endIndex; } return jsonArr; }
使用效果
const arr = parseMultiJson('{a: 1}{a: 2}{a: 3}') console.log(arr) // [{a: 1}, {a: 2}, {a: 3}]
拓展
json字符串中只有一組
jsonstr = "{'name':'xiaoming','age':'11','lastTime':'2016-07-26','address':'luoyang'}"; jsonArray = eval(jsonstr);
json字符串中有多組
jsonstr2 = "[{'name':'xiaoming','age':'11','lastTime':'2016-07-26','address':'luoyang'},{'name':'xiaoming2','age':'12','lastTime':'2016-07-27','address':'luoyang2'}]"; jsonArray2= eval(jsonstr2);
json字符串中數(shù)組中嵌套的還有數(shù)組
jsonstr3 = "{'name':'xiaoming','age':'11','lastTime':'2016-07-26','address':{'pro':'henan','city':'luoy'}}"; jsonArray3 = eval('(' + jsonstr3 + ')');
JS中將object類型轉(zhuǎn)換為json字符串
const obj = {name: "John", age: 30}; const jsonString = JSON.stringify(obj); console.log(jsonString); // 輸出:{"name":"John","age":30}
總結(jié)
eval()函數(shù)因?yàn)樾阅芎桶踩珕栴},在大多數(shù)情況下都不推薦使用,使用 JSON.parse() 來替代 eval()解析JSON 數(shù)據(jù)。
到此這篇關(guān)于js如何將多個(gè)json結(jié)構(gòu)組成的字符串轉(zhuǎn)換為數(shù)組?的文章就介紹到這了,更多相關(guān)js轉(zhuǎn)換多json結(jié)構(gòu)為數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript HTML DOM 元素 (節(jié)點(diǎn))新增,編輯,刪除操作實(shí)例分析
這篇文章主要介紹了JavaScript HTML DOM 元素 (節(jié)點(diǎn))新增,編輯,刪除操作,結(jié)合實(shí)例形式分析了JavaScript針對HTML DOM 元素 (節(jié)點(diǎn))的新增,編輯,刪除相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下2020-03-03javascript中延遲加載的7種方法實(shí)現(xiàn)
在web前端開發(fā)中,性能優(yōu)化一直是一個(gè)非常重要的話題,JavaScript中延遲加載的方式有很多種,本文就來介紹了javascript中延遲加載的7種方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2025-01-01基于Nuxt.js項(xiàng)目的服務(wù)端性能優(yōu)化與錯(cuò)誤檢測(容錯(cuò)處理)
這篇文章主要介紹了基于Nuxt.js項(xiàng)目的服務(wù)端性能優(yōu)化與錯(cuò)誤檢測(容錯(cuò)處理),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10javascript將16進(jìn)制的字符串轉(zhuǎn)換為10進(jìn)制整數(shù)hex
這篇文章主要介紹了javascript將16進(jìn)制的字符串轉(zhuǎn)換為10進(jìn)制整數(shù)hex,需要的朋友可以參考下2020-03-03