JSON数据格式与JavaScript中的JSON对象

 2016年01月14日    606     声明


JSON(JavaScript Object Notation,JavaScript对象标记)是一种轻量级的轻量级的数据交换语言,是ECMAScript的一个子集。JSON是独立于语言的一种文本格式,这种格式非常易于人的阅读和编写,也易于机器的解析。由于没有过多的描述标记,在网络传输中有较高的传输效率,是一种理想的数据交互格式。


  1. JSON特点
  2. JSON类型
  3. JavaScript中的JSON对象


1. JSON特点

JSON是ECMAScript的子集,其与JavaScript中的对象结构类似,是一种键/值(key/value)对的形式。一个JSON结构如下:

{
  "name":"IT笔录",
  "domain":"www.itbilu.com",
  "menus":["Node.js","JavaScript","数据库","Linux"],
  "config":
  {
    "db":"dbPath",
    "host":"192.168.1.22",
    "port":80
  }
}

结合上例,JSON特征如下:

  • JSON数据包含在一个大括号{}中,由{开始,}结束
  • JSON的键/值:分隔,如:"name":"IT笔录"
  • JSON的必须使用双引号""
  • 每组键/值对使用,分隔,且最后一个属性后面不能有逗号。
  • JSON的根据数据类型的不同,有不同的表现形式


2. JSON类型

JSON可以理解为JavaScript对象的序列化形式,JSON的也可以理解为JavaScript对象的值。但并不是JavaScript对象的所有值都可以JSON值中表现,JSON中的值类型有:

  • 数字Number类型(整数或浮点数)
  • 字符串类型(String),需要包在双引号""
  • null
  • 布尔类型(true或false)。
  • 数组(Array),需要包在方括号[]
  • 对象(子JSON),需要包在大括号{}

以上5种数据类型都可以JSON中使用。JSON数据值也有所限制,除上面的数据类型外,如:JavaScript中的函数(Function)、二进制类型等都不能在JSON中使用。


3. JavaScript中的JSON对象

3.1 eval()函数与JSON对象

ECMAScipt 5之前,可以使用eval()函数将JSON字符串转换为JavaScript的Object

ECMAScipt 5中增加了JSON,相比eval()函数,JSON对象处理JSON数据更为方便和准确。

如,分别使用eval()JSON处理Unicode编码数据:

var code = '"\u2028\u2029"';
JSON.parse(code); // 正常执行
eval(code); // 执行失败


3.2 JSON对象中的方法

JSON对象使用非常简单,该对只提供了两个对象方法,分别用于将对象序化为JSON字符串和将JSON字符串反序列化为JavaScriptObject

  • JSON.parse(),解析JSON字符串,并返回解析值(JavaScript对象)。
  • JSON.stringify(),序列化JavaScript对象,并返回序列化后的JSON字符串。返回值只包含合法的JSON,不合法的值将被丢弃。

如,使用JSON.stringify()序列化一个JavaScript对象:

var site = {
  name:'IT笔录',
  domain:'www.itbilu.com',
  get: function () {
    return this.name;
  }
}

JSON.stringify(site); // {"name":"IT笔录","domain":"www.itbilu.com"}

如上所示,function是不合法的JSON值,JSON.stringify()序列化时将其丢弃。

使用JSON.parse()解析JSON字符串:

var jsonString = '{"name":"IT笔录","domain":"www.itbilu.com"}';

JSON.parse(jsonString); // { name: 'IT笔录', domain: 'www.itbilu.com' }