js如何將多個(gè)json結(jié)構(gòu)組成的字符串轉(zhuǎn)換為數(shù)組?
接口返回的EventStream結(jié)構(gòu)的數(shù)據(jù),由于http流式傳輸時(shí),可能會(huì)分段,所以導(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 對(duì)象的開始位置
startIndex = jsonStr.indexOf('{', startIndex);
if (startIndex === -1) {
break;
}
// 找到一個(gè) JSON 對(duì)象的結(jié)束位置
let openBrackets = 1;
endIndex = startIndex + 1;
while (openBrackets > 0 && endIndex < jsonStr.length) {
if (jsonStr[endIndex] === '{') {
openBrackets++;
} else if (jsonStr[endIndex] === '}') {
openBrackets--;
}
endIndex++;
}
// 將該 JSON 對(duì)象解析為一個(gè)對(duì)象,并添加到數(shù)組中
const json = jsonStr.substring(startIndex, endIndex);
jsonArr.push(JSON.parse(json));
// 更新下一個(gè) JSON 對(duì)象的開始位置
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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Bootstrap進(jìn)度條學(xué)習(xí)使用
這篇文章主要為大家詳細(xì)介紹了Bootstrap進(jìn)度條的學(xué)習(xí)使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
mock.js實(shí)現(xiàn)模擬生成假數(shù)據(jù)功能示例
這篇文章主要介紹了mock.js實(shí)現(xiàn)模擬生成假數(shù)據(jù)功能,結(jié)合實(shí)例形式分析了mock.js插件生成模擬數(shù)據(jù)的相關(guān)操作技巧,需要的朋友可以參考下2019-01-01
script不刷新頁面的聯(lián)動(dòng)前后代碼
如何實(shí)現(xiàn)script不刷新頁面的聯(lián)動(dòng),在本文有個(gè)不錯(cuò)的示例或許對(duì)大家有所幫助2013-09-09
利用js實(shí)現(xiàn)選項(xiàng)卡的特別效果的實(shí)例
利用js實(shí)現(xiàn)選項(xiàng)卡的特別效果的實(shí)例,需要的朋友可以參考一下2013-03-03
js實(shí)現(xiàn)密碼強(qiáng)度檢測(cè)【附示例】
下面小編就為大家?guī)硪黄猨s實(shí)現(xiàn)密碼強(qiáng)度檢測(cè)【附示例】。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-03-03
JavaScript自動(dòng)生成24小時(shí)時(shí)間區(qū)間
這篇文章主要介紹了JavaScript自動(dòng)生成24小時(shí)時(shí)間區(qū)間,就以時(shí)間區(qū)間為字符串展開主題香瓜內(nèi)容,需要的朋友可以參考一下2022-06-06
javascript跳轉(zhuǎn)與返回和刷新頁面的實(shí)例代碼
這篇文章主要介紹了javascript跳轉(zhuǎn)與返回和刷新頁面的實(shí)例代碼,簡單介紹了javascript中window.open()與window.location.href的區(qū)別,感興趣的朋友一起看看吧2019-11-11
JavaScript實(shí)現(xiàn)數(shù)據(jù)可視化圖表的示例代碼
這篇文章主要介紹了如何使用JavaScript創(chuàng)建實(shí)時(shí)數(shù)據(jù)可視化圖表,我們將使用流行的圖表庫,如Chart.js,來展示如何將實(shí)時(shí)數(shù)據(jù)動(dòng)態(tài)呈現(xiàn)在圖表中,感興趣的可以了解下2024-01-01

