JS中操作JSON总结


Posted in Javascript onDecember 06, 2020

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

本文主要是对JS操作JSON的要领做下总结。

在JSON中,有两种结构:对象和数组。

1. 一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值' 对”之间运用 “,”(逗号)分隔。 名称用引号括起来;值如果是字符串则必须用括号,数值型则不须要。例如:

var o={"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"};

2. 数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间运用 “,”(逗号)分隔。

例如:

var jsonranklist=[{"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"},{"xlid":"zd","xldigitid":123456,"topscore":1500,"topplaytime":"2009-11-20"}];

为了方便地处理JSON数据,JSON提供了json.js包,下载地址:http://www.json.org/json.js

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

JSON字符串:

var str1 = '{ "name": "cxh", "sex": "man" }';

JSON对象:

var str2 = { "name": "cxh", "sex": "man" };

一、JSON字符串转换为JSON对象

要运用上面的str1,必须运用下面的要领先转化为JSON对象:

//由JSON字符串转换为JSON对象

var obj = eval('(' + str + ')');

或者

var obj = str.parseJSON(); //由JSON字符串转换为JSON对象

或者

var obj = JSON.parse(str); //由JSON字符串转换为JSON对象

然后,就可以这样读取:

Alert(obj.name);

Alert(obj.sex);

特别留心:如果obj本来就是一个JSON对象,那么运用 eval()函数转换后(哪怕是多次转换)还是JSON对象,但是运用 parseJSON()函数处理后会有疑问(抛出语法异常)。

二、可以运用 toJSONString()或者全局要领 JSON.stringify()将JSON对象转化为JSON字符串。

例如:

var last=obj.toJSONString(); //将JSON对象转化为JSON字符

或者

var last=JSON.stringify(obj); //将JSON对象转化为JSON字符

alert(last);

留心:

上面的多个要领中,除了eval()函数是js自带的之外,其他的多个要领都来自json.js包。新版本的 JSON 修改了 API,将 JSON.stringify() 和 JSON.parse() 两个要领都注入到了 Javascript 的内建对象里面,前者变成了 Object.toJSONString(),而后者变成了 String.parseJSON()。如果提示找不到toJSONString()和parseJSON()要领,则说明您的json包版本太低。

js对象与json对象的相互转换

<script> 
  //js对象(student)
  var student = new Object();
  student.name = "Lanny";
  student.age = "25";
  student.location = "China";
  console.log(student);
 
  //将js对象转化为JSON字符
  var last1=JSON.stringify(student);
  console.log(last1);
  console.log(typeof last1);//输出last1的类型
  console.log('--------------------------');
  //由JSON字符串转换为JSON对象/js对象
  var obj1 = eval('(' + last1 + ')');
  var obj2 = JSON.parse(last1);
  console.log(obj1);
  console.log(typeof obj1);
  console.log(obj2);
  console.log(typeof obj2);
 
</script>

效果图:

JS中操作JSON总结

json字符串与json对象的相互转换

<script>    
  //JSON字符串:
  var str1 = '{ "name": "cxh", "sex": "man" }';
  console.log(str1);
  console.log(typeof str1);
  //JSON对象:
  var str2 = { "name": "cxh", "sex": "man" };
  console.log(str2);
  console.log(typeof str2);
  console.log('--------------------------');
  //将js对象转化为JSON字符
  var last1=JSON.stringify(str2);
  console.log(last1);
  console.log(typeof last1);//输出last1的类型
  console.log('--------------------------');
  //由JSON字符串转换为JSON对象
  var obj1 = eval('(' + last1 + ')');
  var obj2 = JSON.parse(str1);
  console.log(obj1);
  console.log(typeof obj1);
  console.log(obj2);
  console.log(typeof obj2);
</script>

效果图:

JS中操作JSON总结

下面是一些补充

在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式:

1.一种为使用eval_r()函数。

2. 使用Function对象来进行返回解析。

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

JSON字符串:
var str1 = '{ "name": "cxh", "sex": "man" }';

JSON对象:
var str2 = { "name": "cxh", "sex": "man" };

第一种解决方法:

var dataObj=eval_r("("+data+")");//转换为json对象
为什么要 eval这里要添加 “("("+data+")");//”呢?

原因在于:eval本身的问题。由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:

alert(eval_r("{}"); // return undefined
alert(eval_r("({})");// return object[Object]

对于这种写法,在JS中,可以到处看到。

如: (function()) {}();  做闭包操作时等。

var str1 = '{ "name": "cxh", "sex": "man" }';
var data=eval_r("("+str1+")");//转换为json对象//data =(new
alert (data.name);//会显示出cxh

这里特别需要注意的是方式1中的eval_r()方法是动态执行其中字符串(可能是js脚本)的,这样很容易会造成系统的安全问题。所以可以采用一些规避了eval_r()的第三方客户端脚本库,比如JSON in JavaScript就提供了一个不超过3k的脚本库。

第二种解决方法:

第二种解析方式就是使用Function对象来完成,它的典型应用就是在JQUERY中的AJAX方法下的success等对于返回数据data的解析

var str1 = '{ "name": "cxh", "sex": "man" }';
var data = (Function("","return "+str1))();
alert (data.name);//会显示出cxh

到此这篇关于JS中操作JSON总结的文章就介绍到这了,更多相关JS操作JSON内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
根据分辨率不同,调用不同的css文件
Jul 07 Javascript
jquery ajax 同步异步的执行示例代码
Jun 23 Javascript
动态添加option及createElement使用示例
Jan 26 Javascript
JS+CSS实现仿msn风格选项卡效果代码
Oct 22 Javascript
JS中call/apply、arguments、undefined/null方法详解
Feb 15 Javascript
jQuery点击其他地方时菜单消失的实现方法
Apr 22 Javascript
JS判断非空至少输入两个字符的简单实现方法
Jun 23 Javascript
VsCode插件整理(小结)
Sep 14 Javascript
VUE 配置vue-devtools调试工具及安装方法
Sep 30 Javascript
JS实现带阴历的日历功能详解
Jan 24 Javascript
js实现网页版贪吃蛇游戏
Feb 22 Javascript
js和jquery判断数据类型的4种方法总结
Aug 28 jQuery
动态添加删除表格行的js实现代码
Feb 28 #Javascript
怎么判断js脚本加载完成
Feb 28 #Javascript
JS获取地址栏参数的几种方法小结
Feb 28 #Javascript
jquery ajaxSubmit 异步提交的简单实现
Feb 28 #Javascript
动态创建script标签实现跨域资源访问的方法介绍
Feb 28 #Javascript
jQuery之选项卡的简单实现
Feb 28 #Javascript
ExtJs纵坐标值重复问题的解决方法
Feb 27 #Javascript
You might like
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
php通过COM类调用组件的实现代码
2012/01/11 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
csdn 博客中实现运行代码功能实现
2009/08/29 Javascript
script标签属性type与language使用选择
2012/12/02 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
jquery分页插件jquery.pagination.js使用方法解析
2016/04/01 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
js事件委托和事件代理案例分享
2017/07/25 Javascript
react native 文字轮播的实现示例
2018/07/27 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
python在windows命令行下输出彩色文字的方法
2015/03/19 Python
python批量生成本地ip地址的方法
2015/03/23 Python
python实现逆波兰计算表达式实例详解
2015/05/06 Python
Python如何判断数独是否合法
2016/09/08 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
中专毕业自我鉴定
2013/10/16 职场文书
社区服务标语
2014/07/01 职场文书
陈安之励志演讲稿
2014/08/21 职场文书
员工激励培训演讲稿
2014/09/16 职场文书
学习十八大的感悟
2015/08/11 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL
mysql 生成连续日期及变量赋值
2022/03/20 MySQL
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技
Java 多线程协作作业之信号同步
2022/05/11 Java/Android