js如何将多个json结构组成的字符串转换为数组?

 更新时间:2024年08月24日 16:22:03   作者:一颗不甘坠落的流星  
接口返回的EventStream结构的数据,由于http流式传输时,可能会分段,所以导致本该每次返回一段json数据结构的字符串,变成了多个json数据结构的字符串拼接在了一起,本文讲述js如何将多个json结构组成的字符串转换为数组

接口返回的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结构为数组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript的原型存在的安全问题及解决办法

    JavaScript的原型存在的安全问题及解决办法

    JavaScript的原型很多人都知道也很好用,但是很多人在使用原型继承中导致的安全问题却很少人知道,接下来我们就来好好了解一下,感兴趣的小伙伴跟着小编一起来看看吧
    2023-08-08
  • js防止页面被iframe调用的方法

    js防止页面被iframe调用的方法

    这篇文章主要介绍了js防止页面被iframe调用的方法,可防止页面被别的网站iframe调用,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析

    JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析

    这篇文章主要介绍了JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作,结合实例形式分析了JavaScript针对HTML DOM 元素 (节点)的新增,编辑,删除相关操作技巧与使用注意事项,需要的朋友可以参考下
    2020-03-03
  • js向上无缝滚动,网站公告效果 具体代码

    js向上无缝滚动,网站公告效果 具体代码

    这篇文章主要介绍了js向上无缝滚动,网站公告效果,有需要的朋友可以参考一下
    2013-11-11
  • javascript中延迟加载的7种方法实现

    javascript中延迟加载的7种方法实现

    在web前端开发中,性能优化一直是一个非常重要的话题,JavaScript中延迟加载的方式有很多种,本文就来介绍了javascript中延迟加载的7种方法实现,具有一定的参考价值,感兴趣的可以了解一下
    2025-01-01
  • 基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)

    基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)

    这篇文章主要介绍了基于Nuxt.js项目的服务端性能优化与错误检测(容错处理),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • JS实现控制文本框的内容

    JS实现控制文本框的内容

    下面小编就为大家带来一篇JS实现控制文本框的内容。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • javascript将16进制的字符串转换为10进制整数hex

    javascript将16进制的字符串转换为10进制整数hex

    这篇文章主要介绍了javascript将16进制的字符串转换为10进制整数hex,需要的朋友可以参考下
    2020-03-03
  • 手机端转盘抽奖代码分享

    手机端转盘抽奖代码分享

    转盘,也有一种说法叫抽奖转盘,大体上是由一块圆形的面板上面有很多的奖项设置,在圆形面板的前面,还有一根指针是固定的,下面,小编给大家分享手机端转盘抽奖,需要的朋友可以参考下
    2015-09-09
  • 微信小程序滚动、轮播图和文本实例详解

    微信小程序滚动、轮播图和文本实例详解

    轮播图是我们日常开发中经常会遇到的一个需求,下面这篇文章主要给大家介绍了关于微信小程序滚动、轮播图和文本的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08

最新评论