JS操作JSON常用方法(10w阅读)


Posted in Javascript onDecember 06, 2020

一、概念简介

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。
在JSON中,有两种结构:对象和数组。

1.对象

var packJson = {"name":"Liza", "password":"123"};

一个对象以“{”开始,“}”结束,“key/value”之间运用 “,”分隔。

2.数组

var packJson = [{"name":"Liza", "password":"123"}, {"name":"Mike", "password":"456"}];

数组是值的有序集合。一个数组以“[”开始,“]”结束。值之间运用 “,”分隔。

二、JSON对象和JSON字符串的转换

在数据传输过程中,JSON是以字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。例如:
JSON字符串:

var jsonStr ='{"name":"Liza", "password":"123"}' ;

JSON对象:

var jsonObj = {"name":"Liza", "password":"123"};

1、 JSON字符串转化 JSON对象

var jsonObject= jQuery.parseJSON(jsonstr);

2、 JSON对象转化 JSON 字符串

var jsonstr =JSON.stringify(jsonObject );

三、JSON的输出美化

JSON.stringify(value[, replacer [, space]])

上一节讲到了将JSON转化为字符串可以用JSON.stringify() 方法,stringify还有个可选参数space,可以指定缩进用的空白字符串,用于美化输出(pretty-print);
space参数是个数字,它代表有多少的空格;上限为10。该值若小于1,则意味着没有空格;如果该参数没有提供(或者为null)将没有空格。

我们看下代码:

var formatJsonStr=JSON.stringify(jsonObject,undefined, 2);

待美化的JSON:

JS操作JSON常用方法(10w阅读)

美化后的效果:

JS操作JSON常用方法(10w阅读)

四、JSON字符串的替换

工作经常遇到这样的字符串,如下:

JS操作JSON常用方法(10w阅读)

需要经过替换后,才能从字符串转化成JSON对象。这里我们需要用JS实现replaceAll的功能, 将所有的 ' \\" ' 替换成 ' " ' .
代码如下,这里的gm是固定的,g表示global,m表示multiple:

var jsonStr=jsonStr.replace(new RegExp('\\"',"gm"), '"' );

替换后的效果如下:

JS操作JSON常用方法(10w阅读)

五、遍历JSON对象和JSON数组

1、遍历JSON对象

代码如下:

var packJson = {"name":"Liza", "password":"123"} ;
 
for(var k in packJson ){//遍历packJson 对象的每个key/value对,k为key
  alert(k + " " + packJson[k]);
}

效果图

JS操作JSON常用方法(10w阅读)

JS操作JSON常用方法(10w阅读)

2、遍历 JSON 数组

代码如下:

var packJson = [{"name":"Liza", "password":"123"}, {"name":"Mike", "password":"456"}];
 
for(var i in packJson){//遍历packJson 数组时,i为索引
  alert(packJson[i].name + " " + packJson[i].password);
}

效果图

JS操作JSON常用方法(10w阅读)

JS操作JSON常用方法(10w阅读)

六、递归遍历

为了实现一些复杂功能常常需要递归遍历JSON对象,这里给出两个递归的例子,希望能给大家参考递归的写法。

1、第一个例子是递归遍历JSON,遇到数组的时候,数组中有超过一个对象,删除第一个对象之后的所有对象
举个例子,原始JSON如下:

JS操作JSON常用方法(10w阅读)

期望处理后的JSON如下:

JS操作JSON常用方法(10w阅读) 

递归代码如下:

/**
 *返回处理后的 json字符串
 */
function jsonParse(jsonObj) {
   
   distinctJson(jsonObj);
   var last=JSON.stringify(jsonObj, undefined, 2);
   return last;
}
 
 
/**
 * 去掉 json中数组多余的项
 */
function distinctJson(obj) {
   if(obj instanceof Array) {
       if(obj.length > 1) { //数组中有超过一个对象,删除第一个对象之后的所有对象
         obj.splice(1, (obj.length - 1));
      }
      distinctJson(obj[0]);
   } else if(obj instanceof Object) {
       for( var index in obj){
          var jsonValue = obj[index];
         distinctJson(jsonValue);
      }
   }
}

2、第二个例子是递归查找目标节点(节点id为targetId,有且只有一个),找到后把targetChildren赋值给节点的children,
举个例子,原始JSON如下,查找的目标节点id为5:

JS操作JSON常用方法(10w阅读)

targetChildren为

JS操作JSON常用方法(10w阅读) 

期望最后处理的JSON结果为:

JS操作JSON常用方法(10w阅读) 

递归代码如下:

/**
 * 递归查找目标节点
 */
function findTarget(obj,targetId,targetChildren){
  if(obj.id==targetId){
     obj.children=targetChildren;
     return true;
  }else{
     if(obj.children!=null){
        for(var i=0; i<obj.children.length; i++){
          var flag=findTarget(obj.children[i],targetId,targetChildren);
          if(flag==true){
             return true;
          }
        }
     }
  }
  return false;
}

到此这篇关于JS操作JSON常用方法(10w阅读)的文章就介绍到这了,更多相关JS操作JSON内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
HTML长文本截取含有HTML代码同样适用的两种方法
Jul 31 Javascript
鼠标经过显示二级菜单js特效
Aug 13 Javascript
9行javascript代码获取QQ群成员具体实现
Oct 16 Javascript
node.js入门教程迷你书、node.js入门web应用开发完全示例
Apr 06 Javascript
跟我学习javascript的全局变量
Nov 16 Javascript
JavaScript操作选择对象的简单实例
May 16 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
Oct 20 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Dec 15 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
Feb 15 Javascript
微信小程序 http请求的session管理
Jun 07 Javascript
vue使用map代替Aarry数组循环遍历的方法
Apr 30 Javascript
vue打开其他项目页面并传入数据详解
Nov 25 Vue.js
10分钟学会js处理json的常用方法
Dec 06 #Javascript
JavaScript中的几种继承方法示例
Dec 06 #Javascript
js调用网络摄像头的方法
Dec 05 #Javascript
浅谈Vue使用Elementui修改默认的最快方法
Dec 05 #Vue.js
vue+element_ui上传文件,并传递额外参数操作
Dec 05 #Vue.js
JavaScript实现浏览器网页自动滚动并点击的示例代码
Dec 05 #Javascript
解决vue下载后台传过来的乱码流的问题
Dec 05 #Vue.js
You might like
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
php数字游戏 计算24算法
2012/06/10 PHP
php算法实例分享
2015/07/14 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
js 页面执行时间计算代码
2009/03/04 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
jQuery 移动端artEditor富文本编辑器
2016/01/11 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
2016/04/20 Javascript
JS实现登录页面记住密码和enter键登录方法推荐
2016/05/10 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
vue组件实例解析
2017/01/10 Javascript
浅谈js中的bind
2019/03/18 Javascript
微信小程序+腾讯地图开发实现路径规划绘制
2019/05/22 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
2020/05/03 Javascript
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
py中的目录与文件判别代码
2008/07/16 Python
Python初学时购物车程序练习实例(推荐)
2017/08/08 Python
基于python 爬虫爬到含空格的url的处理方法
2018/05/11 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
python相对企业语言优势在哪
2020/06/12 Python
西班牙创意礼品和小工具网上商店:Curiosite
2016/07/26 全球购物
中东最大的在线宠物店:Dubai Pet Food
2020/06/11 全球购物
入党申请人的自我鉴定
2013/12/01 职场文书
店长助理岗位职责
2013/12/13 职场文书
运动会稿件300字
2014/02/14 职场文书
哈弗商学院毕业生求职信
2014/02/26 职场文书
2014年初中班主任工作总结
2014/11/08 职场文书
水电工岗位职责
2015/02/14 职场文书
2015年光棍节活动总结
2015/03/24 职场文书
小学中队委竞选稿
2015/11/20 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
python opencv检测直线 cv2.HoughLinesP的实现
2021/06/18 Python
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android
详解Golang如何实现支持随机删除元素的堆
2022/09/23 Python