区别

JSON(JavaScript Object Notation)仅仅是一种数据格式(或者叫数据形式)。数据格式其实就是一种规范,按照这种规范来存诸和交换数据。就好像 XML 格式一样。

区别 Json Javascript对象
含义 仅仅是一种数据格式 对象的实例
传输 可以跨平台数据传输,速度快 不能传输
表现 1. 键值对
2. 键必须加双引号
3. 值不能为方法函数/undefined/NaN
1.键值对
2.值可以是函数、对象、字符串、数字、boolean 等
相互转换 Json → JS 对象:
1. var obj = JSON.parse(jsonstring);
2. var obj = eval("("+jsonstring+")");
JS 对象 → Json:
JSON.stringify(obj);

JSON 文本格式在语法上与创建 JavaScript 对象的代码相同,但本质是不同的。我们不能把以下的对象叫 JSON,比如:

  1. var obj1 = {}; // 这只是 JS 对象
  2. // 可把这个称做:JSON 格式的 JavaScript 对象
  3. var obj2 = {"width":100,"height":200,"name":"rose"};
  4. // 可把这个称做:JSON 格式的字符串
  5. var str1 = '{"width":100,"height":200,"name":"rose"}';
  6. // 这个可叫 JSON 格式的数组,是 JSON 的稍复杂一点的形式
  7. var arr = [
  8. {"width":100,"height":200,"name":"rose"},
  9. {"width":100,"height":200,"name":"rose"},
  10. {"width":100,"height":200,"name":"rose"},
  11. ];
  12.         
  13. // 这个可叫稍复杂一点的 JSON 格式的字符串     
  14. var str2='['+
  15. '{"width":100,"height":200,"name":"rose"},'+
  16. '{"width":100,"height":200,"name":"rose"},'+
  17. '{"width":100,"height":200,"name":"rose"},'+
  18. ']';

但 JSON 和 JavaScript 确实存在渊源,JSON 本身的意思就是 JavaScript 对象表示法(JavaScript Object Notation),可以说这种数据格式是从 JavaScript 对象中演变出来的。JSON 语法是 JavaScript 对象表示法语法的子集

JSON 格式的数据,主要是为了跨平台交流数据用的。JSON 独立于语言和平台,JSON 解析器和 JSON 库支持许多不同的编程语言。

语法

1、JSON 语法规则:

  • 数据在名称/值对中

  • 数据由逗号分隔

  • 花括号保存对象

  • 方括号保存数组

2、JSON 数据值:

  • 数字(整数或浮点数)

  • 字符串(在双引号中)

  • 逻辑值(true 或 false)

  • 数组(在方括号中)

  • 对象(在花括号中)

  • null

JSON 数据结构有两种,这两种结构就是对象和数组,通过这两种结构可以表示各种复杂的结构。
JSON 使用严格的 JavaScript 对象表示法来表示结构化的数据,因此 JSON 的属性名必须有双引号

  1. {
  2. "company": "Apple",
  3. "age": 18,
  4. "IPO", true,
  5. "employees": [
  6. { "firstName":"John" , "lastName":"Doe" },
  7. { "firstName":"Anna" , "lastName":"Smith" },
  8. { "firstName":"Peter" , "lastName":"Jones" }
  9. ]
  10. }

数据转换

JSON 数据转换为 JS 对象

1、JS 解析器:eval() 函数

  1. // 创建包含 JSON 语法的 JavaScript 字符串
  2. var txt = '{ "employees" : [' +
  3. '{ "firstName":"John" , "lastName":"Doe" },' +
  4. '{ "firstName":"Anna" , "lastName":"Smith" },' +
  5. '{ "firstName":"Peter" , "lastName":"Jones" } ]}';
  6. //使用 JS 解析器,解析 JSON 文本并生成 JS 对象
  7. var obj = eval("(" + txt + ")");

使用 eval() 函数时,必须为传入的 JSON 数据参数添加括号'()',否则会报语法错误。

2、 解析器:parse()函数

但 eval() 的问题在于,除了可以解析 JSON 数据,也可以用于执行 JavaScript 脚本片段,这就会带来潜在的安全问题。JSON 提供了专门的 JSON Parser 来实现只用于解析 JSON 数据,不会执行 JavaScript 脚本,而且速度更快。如下:

  1. var obj = JSON.parse(txt);

较新的浏览器和最新的 ECMAScript (JavaScript) 标准中均包含了原生的对 JSON 的支持。

JS 数据转换为 JSON 文本

使用 JSON.strigify() 函数,将 Javascript 对象转换为 JSON 文本数据。

 
  1. var obj = {a:1,b:2}
  2. var txt = JSON.stringify(obj);
  3. console.log(txt);
  4. 结果:
  5. "{"a":1,"b":2}"

JavaScript:JSON 和 JS 对象的更多相关文章

  1. JSON(JavaScript Object Notation, JS 对象标记)

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言 ...

  2. json转js对象方法,JS对象转JSON方法

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  3. JSON 与 JS 对象的区别与对比

    定义: JSON是什么?JSON是JS的一种简单数据格式,JSON是JavaScript原生格式,它是一种严格的js对象的格式,JSON的属性名必须有双引号,如果值是字符串,也必须是双引号. 问题: ...

  4. JSON与JS对象的区别

    <script> var obj2={};//这只是JS对象 var obj3={width:100,height:200};/*这跟JSON就更不沾边了,只是JS的 对象 */ var ...

  5. JSON 与 JS 对象的关系

    很多人搞不清楚 JSON 和 Js 对象的关系,甚至连谁是谁都不清楚.简单来说: JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串. 如 var obj ...

  6. javascript json字符串与对象相互转换

    在实际项目中,经常遇到字符格式的问题,记下来以便日后方便查看.用到两个函数:JSON.stringify() 和 JSON.parse(). 使用ajax向后台请求数据,后台给前端返回数据,明明后端脚 ...

  7. JSON与js对象序列化

    JavaScript对象表示法(JavaScript Object Notation,简称JSON)是一种轻量级的数据交换格式,它基于js字面量表示法,是js的一个子集.虽然是一个js的子集但是他与语 ...

  8. 理清JS数组、json、js对象的区别与联系

    最近在敲代码时,遇上了一个关于JS数组的问题,由此引发了关于对象和json的联想,曾经觉得很畅顺的知识点突然模糊了.于是,为了理清这些东西,有了如下这篇文章.觉得没问题的猿们可以当复习,而那些带着疑问 ...

  9. Jquery第一篇【介绍Jquery、回顾JavaScript代码、JS对象与JQ对象的区别】

    什么是Jquery? Jquey就是一款跨主流浏览器的JavaScript库,简化JavaScript对HTML操作 就是封装了JavaScript,能够简化我们写代码的一个JavaScript库 为 ...

随机推荐

  1. mysql数据恢复失败记录

    今天遇到了MySQL有几个数据表空间丢失的问题,作为一个外行尝试好久没恢复成功,考虑到只是几个基础数据表,就删除数据表停止服务,删除ibd文件后再创新创建表解决了问题. 近期的一些事让我不像以前一样钻 ...

  2. Linux网络协议栈(四)——链路层(1)

    1.接收帧当网络适配器接收到数据帧时,就会触发一个中断,中断处理程序执行一些需要及时处理的任务,然后在下半部进行其它可以延迟的处理.中断处理程序主要进行以下一些操作:(1)    分配sk_buff数 ...

  3. saltstack源码-启动3-config.py配置文件加载

    #目标文件位置/usr/lib/python2.6/site-packages/salt/config.py#这个文件加载配置文件的模块.master和minion的配置文件加载都是在这个模块里面完成 ...

  4. (转)Javascript中console.log()用法

    原文地址应该是这个吧:http://my.oschina.net/junn/blog/142728 注意:必须要提前打开IE的开发者模式才能看到输入 否则就会报错. IE下可以这个判断: if (co ...

  5. 阿里DNS 223.5.5.5 223.6.6.6 (转载)

    转自:http://it.oyksoft.com/post/6780/ 阿里DNS:   223.5.5.5       223.6.6.6 为何用它? 一.选择阿里DNS让你购物更爽,如果是淘宝狂人 ...

  6. 浅谈并查集 By cellur925【内含题目食物链、银河英雄传说等】

    什么是并查集? 合并!查询!集合! 专业点说? 动态维护若干不重叠的和,支持合并查询的数据结构!(lyd老师说的) 数据结构特点:代表元.即为每个集合选择一个固定的元素,作为整个集合的代表,利用树形结 ...

  7. Ubuntu 18 开机后直接进入命令行界面,没法进入桌面

    应该是之前不知道干啥,删了gnome的一个东西,导致没法正常进入 暴力解决,直接重装桌面环境 sudo apt install ubuntu-desktop

  8. Mybatis的全局配置文件标签介绍(mybatis-config.xml)

    全局配置文件中本人只记录了常用的几个  typeHandlers, objectFactory,objectWrapperFactory, reflectorFactory, plugins, dat ...

  9. [POJ1741] Tree【树分治 点分治】

    传送门:http://poj.org/problem?id=1741 写的第一道树分治题,撒花纪念~ 对于每一对点对(i, j),它有三种情况: ① 其中一个是根节点.这种情况比较简单,直接加上就好了 ...

  10. SIFT特征点检测与匹配

    SIFT的步骤如下: (1) 尺度空间极值检测(Scale-space Extrema Detection) 也就是在多尺度高斯差分(Difference of Gauss)空间中检测极值点(3x3x ...