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 函数使用说明
Apr 07 Javascript
js模拟滚动条(横向竖向)
Feb 22 Javascript
Jquery通过JSON字符串创建JSON对象
Aug 24 Javascript
使用jQuery管理选择结果
Jan 20 Javascript
自己编写的支持Ajax验证的JS表单验证插件
May 15 Javascript
js兼容火狐显示上传图片预览效果的方法
May 21 Javascript
JavaScript中String.match()方法的使用详解
Jun 06 Javascript
jQuery语法小结(超实用)
Dec 31 Javascript
JQuery实现定时刷新功能代码
May 09 jQuery
JavaScript Canvas实现验证码
Aug 02 Javascript
详解JavaScript 的变量
Mar 08 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
Jun 12 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上传图片时判断上传文件是否为可用图片的方法
2016/10/20 PHP
php实现图片压缩处理
2020/09/09 PHP
jquery遍历筛选数组的几种方法和遍历解析json对象
2013/12/13 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
首页图片漂浮效果示例代码
2014/06/05 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
JQueryMiniUI按照时间进行查询的实现方法
2017/06/07 jQuery
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
vue项目中vue-i18n和element-ui国际化开发实现过程
2018/04/25 Javascript
JS如何在数组指定位置插入元素
2020/03/10 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
python套接字流重定向实例汇总
2016/03/03 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
浅谈python数据类型及类型转换
2017/12/18 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
使用Django2快速开发Web项目的详细步骤
2019/01/06 Python
Python基于机器学习方法实现的电影推荐系统实例详解
2019/06/25 Python
python实现动态创建类的方法分析
2019/06/25 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
Python 限定函数参数的类型及默认值方式
2019/12/24 Python
解决python执行较大excel文件openpyxl慢问题
2020/05/15 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
英国独特礼物想法和个性化礼物网站:notonthehighstreet.com
2018/04/16 全球购物
ghd官网:英国ghd直发器品牌
2018/05/04 全球购物
物流管理应届生求职信
2013/11/07 职场文书
夜班门卫岗位职责
2013/12/09 职场文书
小学班主任事迹材料
2014/12/17 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书