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 相关文章推荐
javascript Base类 包含基本的方法
Jul 22 Javascript
JavaScript 基于原型的对象(创建、调用)
Oct 16 Javascript
使用delegate方法为一个tr标签加一个链接
Jun 27 Javascript
学习JavaScript编程语言的8张思维导图分享
Mar 27 Javascript
JQuery日期插件datepicker的使用方法
Mar 03 Javascript
详解ECharts使用心得总结
Dec 06 Javascript
Vue.js 插件开发详解
Mar 29 Javascript
swiper自定义分页器使用方法详解
Sep 14 Javascript
layui实现数据表格隐藏列的示例
Oct 25 Javascript
基于JavaScript实现单例模式
Oct 30 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
May 28 Javascript
JS removeAttribute()方法实现删除元素的某个属性
Jan 11 Javascript
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中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
php从数据库中读取特定的行(实例)
2017/06/02 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
JQuery触发事件例如click
2013/09/11 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
2014/06/11 Javascript
sails框架的学习指南
2014/12/22 Javascript
修改或扩展jQuery原生方法的代码实例
2015/01/13 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
使用Javascript实现选择下拉菜单互移并排序
2016/02/23 Javascript
JavaScript中this的用法及this在不同应用场景的作用解析
2017/04/13 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
js前端面试之同步与异步问题详解
2019/04/03 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
微信小程序 bindtap 传参的实例代码
2020/02/21 Javascript
python自动化测试实例解析
2014/09/28 Python
在python中实现对list求和及求积
2018/11/14 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
Django框架 querySet功能解析
2019/09/04 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
美国网上鞋城:Shoeline.com
2016/11/17 全球购物
法制报告会主持词
2014/04/02 职场文书
党的群众路线教育实践活动方案
2014/10/31 职场文书
法定代表人证明书
2014/11/28 职场文书
小学教师岗位职责
2015/04/02 职场文书
文艺节目主持词
2015/07/06 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL
详解vue中v-for的key唯一性
2021/05/15 Vue.js
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis
详细介绍Java中的CyclicBarrier
2022/04/13 Java/Android