轻量级数据格式——JSON

来源:互联网 发布:python alpha策略框架 编辑:程序博客网 时间:2024/06/10 18:17
在很久很久以前,XML是互联网上传输数据的标准 ,但是大家普遍反映XML太繁琐 ,再后来,随着Web的发展 ,人们发现JSON作为JavaScript语法的子集使用更方便 .于是JSON就成为了标准 ,现在大家都把JSON作为通信的数据格式

更多资料请访问:http://blog.csdn.net/q1056843325/article/details/53427123

JSON语法大体分为三种类型值

  • 简单类型值:可表示字符串、数字、布尔值和null
  • 对象:复杂数据类型,表示无序键值对
  • 数组:复杂数据类型,表示有序值列表
  • 简单类型值

    单独的基本类型值也可以看做JSON 
    语法与JavaScript相同 
    只有一点要注意 
    在我们JavaScript中字符串可以用双引号表示,也可以用单引号表示 
    但是JSON中的字符串格式必须使用双引号

  • 对象

    由于JSON是JavaScript语法的子集 
    所以我主要说一下不太一样的地方 
    先看一下我们常用的对象字面量声明格式

    var man = {    name: 'payen',    sex: 'male',    age: 19};
    • 1
    • 2
    • 3
    • 4
    • 5
    • 1
    • 2
    • 3
    • 4
    • 5

    我们JavaScript中对象可以给属性加引号也可以不加 
    (为了区分普通对象与JSON对象,通常不加引号) 
    但在JSON中对象要求给属性加(双)引号 
    我们上面的对象在JavaScript中也可以这么写,完全等价

    var man = {    "name": "payen",    "sex": "male",    "age": 19};
    • 1
    • 2
    • 3
    • 4
    • 5
    • 1
    • 2
    • 3
    • 4
    • 5

    而用JSON表示上面的对象就是

    {    "name": "payen",    "sex": "male",    "age": 19}
    • 1
    • 2
    • 3
    • 4
    • 5
    • 1
    • 2
    • 3
    • 4
    • 5

    (JSON中没有变量的概念,没有分号) 
    当然JSON中对象的值也可以是对象 
    不管多么复杂的JSON,对象的键(属性)都要加(双)引号

  • 数组

    虽然在我们JavaScript中,数组严格来说属于对象 
    但我们通常都把它们区别对待 
    我们通用的声明数组字面量的方法

    var value = [123, 'abc', true];
    • 1
    • 1

    JSON也是相同的语法

    [123, "abc", true]
    • 1
    • 1

    再次强调,JSON没有变量和分号

    通常来说,数组和对象是JSON的最外层形式 
    通过数组、对象以及简单类型值能够构造各式各样的JSON数据格式

    JSON对象

    ES5规范了解析JSON的行为 
    定义了全局对象JSON 
    它有两个方法

    • stringify() 
      JavaScript对象 –> JSON字符串
    • parse() 
      JSON字符串 –> JavaScript对象

    最基本的用法当然就是 
    我们把要转换的变量作为参数穿进去 
    举个例子(这个例子会一直用)

    var man = {    'name': "payen", <--    sex: "male", <--    "age": 19,    "school": {        "name": 'HUST',        "sex": undefined, <--        "location": function(){} <--    }}var str = JSON.stringify(man);console.log(str);console.log(typeof str);
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    下面我们看看控制台打印 

    可以看到JSON.stringify真的返回了JSON字符串 
    我们无引号还有单引号的属性在JSON字符串中都变成了双引号 
    并且属性值为undefined或者函数的属性被自动忽略了 
    (原型成员更是被忽略掉)

    但是数组不一样 
    数组没有对象绝情把它们一脚踢开,而是返回null

    console.log(JSON.stringify([123, undefined, null, function(){}]));
    • 1
    • 1

    我们可以用JSON.parse还原为JavaScript对象

    console.log(JSON.parse(str));
    • 1
    • 1



0 0