JSON字符串和Javascript对象字面量

JSON是基于Javascript语法的一个子集而创建的,特别是对象和数组字面量语法。

正是由于JSON的这种特殊来历,导致很多Javascript程序员往往会混淆Javascript对象字面量和JSON。

1 JSON是纯文本,不是Javascript代码

JSON是作为XML的替代品而出现的,它本身是一种跨平台的数据表示标准,是纯文本字符串,不局限于任何编程语言。

Javascript代码则必须需符合其语言规范,不能在其他语言中直接使用。

2 JSON文本是Javascript语言中的合法源代码

然而由于JSON本身选用了Javascript的语法子集,导致了JSON字符串本身就是合法的Javascript源代码片段。

  1. var person =
  2. // 下面的Javascript代码正好符合JSON
  3. {
  4. "name": "SMSTONG",
  5. "title": "DBA“,
  6. "age": 18
  7. }

然而,我们不能把上面的代码叫做JSON,因为它出现在Javascript源文件中,是Javascript代码,不是纯文本。只能把它叫做Javascript对象字面量。

3 Javacript字面量代码不一定是合法的JSON文本

所有的JSON文本都是合法的Javascript源代码片段,但是反过来去不成立。因为JSON只是Javascript的一个子集而已,Javascript还有很多的部分是不符合JSON规范的。例如:

  1. var person =
  2. // 下面的Javascript代码不符合JSON
  3. {
  4. name: "SMSTONG",
  5. title: "DBA“,
  6. age: 18
  7. }

我们把包围属性名的双引号去掉了,仍然是合法有效的Javscript对象字面量代码,但已经不是合法的JSON文本了,因为JSON要求所有的属性必须加双引号。

不单单是引号的问题,Javascript中还有很多数据类型也是JSON不支持的,如函数:

  1. var person =
  2. {
  3. "name":"SMSTONG",
  4. "fight": function(){
  5. alert('fighting the enemy!');
  6. }
  7. }

上面是非常常见的合法的对象字面量,然而却不是合法的JSON,因为JSON还不支持函数这种数据类型。

4 eval()的参数是Javascript源代码片段,而不是JSON字符串

eval(str)函数本质上是把str作为Javascript代码来执行的,例如:

  1. var obj = eval("{}");

上述代码运行时会产生错误,因为eval会把{}当成是没有名字的Javascript语句。

解决办法是,加上小括号:

  1. var obj = eval("({})");

此时,小括号内部先运算得到一个空对象,然后返回。

对于JSON字符串,通用的解析方法为:

  1. var obj = eval("(" + jsonText + ")");

在ECMAScript3.1标准中,已经提供了一个名为JSON的全局对象,专门用来解析和反解析JSON字符串。

  1. var obj = JSON.parse("{}");

与eval完全不同,JSON.parse()方法,把参数当成是JSON字符串文本,而不是Javascript代码,所以只要是合法的JSON字符串就可以。

1.首先明确JSON是什么?

  • json是一种数据交换格式,是纯文本的字符串,是作为一种替代XML数据格式角色出现,json简单易读方便转换跨平台,有很多json api提供了json字符串与对象互转的方法,如下面JavaScript中json字符串互转的方法。
  1. JSON.stringify()//将对象转化为json字符串
  2. JSON.parse()//将json字符串转化了对象

2.JSON和JavaScript的关系是怎样的呢 ?

  • json开始是JavaScript语法中的一个子集,后来人们觉得这种形式的用来作为数据交换格式不错,就单独将它拿了出来,这也是造成大家对JSON,JSON字面量,JSON对象之间混淆不清的缘由了。

3.JSON字面量又是什么呢

  • 一般的我们创建一个对象的方法
  1. var obj1=new Object();
  2. var obj2={}//字面量
  • 上面的第二种就是JavaScript对象字面量的写法。那那json字面量是什么呢,那我们在看看下面的一段代码
  1. var person={
  2. "name":"xianyu",
  3. "age":24,
  4. "love":"Online Game"
  5. }
  • 从上我们可以看出这就是用字面量表示一个对象,而这个格式就是json格式的, 因为本身json就是JavaScript语法集的一种,所以json字面量就是用json格式的JavaScript对象字面量。

  • json放到JavaScript中执行是合法代码,是JavaScript对象字面量,但是JavaScript对象字面量不一定是json

  1. var person={
  2. "name":"xianyu",
  3. "age":24,
  4. "love":"Online Game"
  5. }
  6. //和
  7. var person={
  8. name:'xianyu',
  9. age:24,
  10. love:'Online Game',
  11. skill:function(){
  12. alert('basketball')
  13. }
  14. }
  • json必须是符合以下

    • 1.键一定要用双引号,值如果是字符串也要用双引号包括
    • 2.数据只包括,数字,布尔,数组,null,对象,字符串
  • 而JavaScript对象字面量属性不用引号也可以,而且值可以是任何类型,函数,undefined或者是正则都是可以的 。json只是JavaScript语法集中的一种,还有很多其他部分的东西都是不符合json的规范。

4.那JSON对象什么呢

  • JSON对象就是JavaScript中的一个对象,里面有一些属性和方法供我们使用,如下面2个方法
  1. JSON.stringify()//将对象转化为json字符串
  2. JSON.parse()//将json字符串转化了对象
  3. //利用这2个方法也用可以做一个对象深拷贝
  • 额外扩展深拷贝
  1. var obj={name:'xianyu',age:24}
  2. var str=JSON.stringify(obj)//得到json字符串
  3. str=JSON.parse(str)//得到Object {name: "xianyu", age: 24}
  4. str==obj//得到false
  5. var obj1 = obj //直接赋值得到的只是一个指针,两者指向东西都是一样的
  6. obj1==obj//得到true

JSON字符串和Javascript对象字面量的更多相关文章

  1. JavaScript 对象字面量

    JavaScript 对象字面量   JavaScript 对象字面量 在编程语言中,字面量是一种表示值的记法.例如,"Hello, World!" 在许多语言中都表示一个字符串字 ...

  2. JavaScript对象字面量

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  3. javaScript高级教程(九) ------javascript对象字面量--------困扰已久的问题

    在编程语言中,字面量是一种表示值的记法.例如,"Hello, World!" 在许多语言中都表示一个字符串字面量(string literal ),JavaScript也不例外. ...

  4. JSON 字符串转换为JavaScript 对象.JSON.parse()和JSON.stringify()

    使用 JavaScript 内置函数 JSON.parse() 将字符串转换为 JavaScript 对象: var text = '{ "sites" : [' + '{ &qu ...

  5. JSON 字符串转换为 JavaScript 对象

    将数据组合成json格式的字符串var text = '{ "sites" : [' + '{ "name":"Runoob" , &quo ...

  6. JSON对象和JavaScript对象直接量的区别--不同之处

    JSON对象和JS对象直接量 在工作当中,我们总是可以听到人说将数据转换为JSON对象,或者说把JSON对象转换为字符串之类的话,下面是关于JSON的具体说明. JSON对象并不是JavaScript ...

  7. 不可不知的JavaScript 之 JSON对象和JavaScript对象直接量

    JSON对象和JS对象直接量 在工作当中,我们总是可以听到人说将数据转换为JSON对象,或者说把JSON对象转换为字符串之类的话,下面是关于JSON的具体说明. JSON对象并不是JavaScript ...

  8. Js里头的对象字面量

    JavaScript 对象字面量 在编程语言中,字面量是一种表示值的记法.例如,"Hello, World!" 在许多语言中都表示一个字符串字面量(string literal ) ...

  9. json,json对象以及js对象字面量的区别

    从定义看: json:一种数据交换格式 json对象:js的一个内置对象,拥有JSON.stringify()和JSON.parse()两个方法 js对象字面量:封闭在花括号对({})中的一个对象的零 ...

随机推荐

  1. LeetCode: 59. Spiral Matrix II(Medium)

    1. 原题链接 https://leetcode.com/problems/spiral-matrix-ii/description/ 2. 题目要求 给定一个正整数n,求出从1到n平方的螺旋矩阵.例 ...

  2. 使用apache cgi运行ruby脚本

    在ubuntu下 进入 /usr/lib/cgi-bin目录 新建文件 ruby.cgi 内容如下 #!/usr/bin/ruby print "Content-type: text/htm ...

  3. javaweb(六)——Servlet开发(二)

    一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...

  4. keepalived+nginx实现高可用+tomcat

    1.keepalived的yum安装 安装依赖包[root@localhost ~]# yum install -y curl gcc openssl-devel libnl3-devel net-s ...

  5. 第七模块:项目实战一 第1章 项目实战:CRM客户关系管理系统开发

    01-crm介绍 02-权限系统介绍 03-第一版表结构设计 04-第二版表结构设计 05-orm中创建表结构 06-销售管理系统业务 07-销售管理系统权限信息录入 08-快速实现简单的权限控制的设 ...

  6. 1.1.0 Unity零基础入门2——Roll a Ball

    1. 游戏界面 2.代码 //FoodRotate - - 控制cube旋转 using System.Collections; using System.Collections.Generic; u ...

  7. Java开发工程师(Web方向) - 02.Servlet技术 - 第1章.Servlet

    第1章--Servlet Servlet简介 Servlet应用于? 浏览器发出HTTP请求,服务器接收请求后返回响应给浏览器. 接收请求后到返回响应之间: 服务器将请求对象转交给Servlet容器 ...

  8. Python2快速入门教程,只需要这十五张图片就够了!

    今天给大家分享的教程是适用于Python 2.7,但它可能适用于Python 2.Python 2.7将停止在2020中的支持. 与Python 2.7和3兼容的Python代码是完全可能的.通过使用 ...

  9. commons-lang源码解析之StringUtils

    apache的commons工具包是平时使用最多的工具包之一,对其实现方式需要具体了解.commons-lang version 3.1 empty和blank的区别 StringUtils中判断St ...

  10. 关于mysql开元数据库的几个随想

    现在已经是凌晨了,昨天晚上写了我人生中的第一篇笔记,觉得没什么可写的,写了一个多小时都没写出什么,现在突然想写点东西了,这是一个比较有趣的问题,前两个月换了新工作,记得当初面试这份工作的时候面试到第三 ...