接口返回的EventStream结构的数据,由于http流式传输时,可能会分段,所以导致本该每次返回一段json数据结构的字符串,变成了多个json数据结构的字符串拼接在了一起。本文讲述js如何将多个json结构组成的字符串转换为数组。
自定义函数
例如:
'{a: 1}{a: 2}{a: 3}'
想要得到这种的:
[{a: 1}, {a: 2}, {a: 3}]
函数实现:支持深层嵌套的json结构
function parseMultiJson(jsonStr) {
const jsonArr = [];
let startIndex = 0;
let endIndex = 0;
while (startIndex < jsonStr.length) {
// 找到一个 JSON 对象的开始位置
startIndex = jsonStr.indexOf('{', startIndex);
if (startIndex === -1) {
break;
}
// 找到一个 JSON 对象的结束位置
let openBrackets = 1;
endIndex = startIndex + 1;
while (openBrackets > 0 && endIndex < jsonStr.length) {
if (jsonStr[endIndex] === '{') {
openBrackets++;
} else if (jsonStr[endIndex] === '}') {
openBrackets--;
}
endIndex++;
}
// 将该 JSON 对象解析为一个对象,并添加到数组中
const json = jsonStr.substring(startIndex, endIndex);
jsonArr.push(JSON.parse(json));
// 更新下一个 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字符串中数组中嵌套的还有数组
jsonstr3 = "{'name':'xiaoming','age':'11','lastTime':'2016-07-26','address':{'pro':'henan','city':'luoy'}}";
jsonArray3 = eval('(' + jsonstr3 + ')');
JS中将object类型转换为json字符串
const obj = {name: "John", age: 30};
const jsonString = JSON.stringify(obj);
console.log(jsonString); // 输出:{"name":"John","age":30}
总结
eval()函数因为性能和安全问题,在大多数情况下都不推荐使用,使用 JSON.parse() 来替代 eval()解析JSON 数据。
到此这篇关于js如何将多个json结构组成的字符串转换为数组?的文章就介绍到这了,更多相关js转换多json结构为数组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源链接:https://www.jb51.net/javascript/326442mfs.htm
© 版权声明
本站所有资源来自于网络,仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您(转载者)自己承担!
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
THE END











暂无评论内容