对JavaScript解析JSON格式数据的理解

对JavaScript解析JSON格式数据的理解
一、JSON与JavaScript对象的关系
     1,JSON的由来:
              在21世纪初,Douglas Crockford(Web开发领域最知名的技术权威之一,ECMA JavaScript2.0标准化委员会委员,被JavaScript之父Brendan Eich称为JavaScript的大宗师(Yoda),曾任Yahoo!资深JavaScript架构师,现任PayPal高级JavaScript架构师)试图寻找一种更加简便的数据交换格式,能够在服务器之间交换数据,当时通用的数据交换语言是XML,但是Douglas Crockford认为XML的生成与解析都过于麻烦,所以他提出了一种更加简化的格式,就是我们现在使用的JSON。所以说, JSON就是一种数据进行交换需要遵守的格式,是存储和交换文本信息的语法,但它并不是Javascript独有的数据格式,其它 很多语言都可以对JSON进行解析和序列化
       2,与JavaScript的渊源:
          JavaScript对象的创建有两种方式,分别为字面量形式和构造函数形式。采用JSON格式描述的数据恰又为JavaScript以字面量形式声明的对象的结构一样(具体的可以搜索JSON的由来),因此,可以很方便的使用JavaScript的语法来处理这种格式的数据。
例:
 var jsonObj = {a:1,b:2};  (与 var jsonObj = {'a':1,'b':2};一样);
上述的jsonObj对象就是采用符合JSON规范的一个JavaScript对象,但并不是所有采用字面量形式声明的对象都是符合JSON格式的,下面示例的这个就不符合:

  为什么说“不是所有采用字面量形式声明的对象都是符合JSON格式的”? 因为JSON是为了数据的高效简便传输而生的,因此,他描述的是进行传输的数据需要遵守的格式,而JavaScript的对象不仅描述数据的属性,而且还需要有能力描述数据的行为,这两者的定位与出现的初衷都是不一样的。
      采用JSON数据结构传输的数据可以很容易的解析为有用的JavaScript对象,ECMAScript5对解析JSON的行为进行了规范,定义了全局对象JSON(此为全局对象的内部对象), JSON对象有两个方法:stringify()和parse()。这两个方法分别用于把JavaScript对象序列化为JSON字符串和把符合JSON规则的字符串解析为原生JavaScript对象。

二、JSON的基本语法:
① 并列的数据之间用逗号( , )分隔
② 映射用冒号( : )表示
③ 映射的集合用大括号( {} )表示
④ 并列数据的集合用方括号( [] )表示
例:
    a, {'a':1,'b':2}   b,  [{'c':10,'d':20}]

三、stringify()和parse()的用法示例
1, JSON.parse() 用于将一个包含JSON符号的字符串中解析为 JavaScript对象,如图:

2, JSON.stringify()用于将一个JavaScript对象转换成字符串,如图:

3, 一个常见错误的分析(Uncaught SyntaxError: Unexpected token  with JSON.parse),如图:

     示例中尝试对一个JavaScript对象进行解析,出现了语法错误。原因在于,当parse传入的参数不是string类型时,会尝试将参数转换为string类型,如果能够转换成正确的JSON字符串,则会解析成相应的JavaScript对象;此例中,会尝试将参数obj转化为string类型,调用默认的toString()方法(基于原型链继承而来的方法),而此方法默认返回"[object Object]"字符串,这不是一个符合JSON格式的字符串,因此会报如图所示错误。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值