JSON的简要解析

概念解释

JSON  指的是JavaScript对象表示法(Java Script Object Notation)

JSON  是轻量级的文本数据交换格式

JSON  具有自我描述性,更易理解

JSON  使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。

更简单直白一点的解释是

JSON 就会是一种有规则的字符串

JSON 就是key/value存储,理论上支持String、Number、Value几乎支持所有类型

 JSON  可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在网络或者程序之间轻松地传递这个字符串,并在需要的时候将它还原为各编程语言所支持的数据格式,例如在 PHP 中,可以将 JSON 还原为数组或者一个基本对象。在用到AJAX时,如果需要用到数组传值,这时就需要用JSON将数组转化为字符串。

 JSON语法规则

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

名称:

JSON的书写格式:{key:value}、{key:array}

如果是字符串的话,键和值都需要用双引号

取值范围:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)一定是英文双引号(""),个别弱语言可以支持单引号。
  • 逻辑值(true 或 false
  • 数组(在方括号中)一般是在Value位置上
  • 对象(在花括号中)一般是在Value位置上
  • null

常见的JSON格式:

  • {"key":"value"},最简单的JSON 格式。
  • {"key1":"value1","key2":"value2"},一个JSON中有多个键值对的表达方式。
  • {"key":["a","b","sojson.com"]},value是一个Array 的JSON格式
  • {"sojson":["5年","JSON在线解析","sojson.com",true,1,null]},value是一个Array 的JSON格式,并且这个数组中有多重类型的元素,有String,Boolean,Number,null。
  • {"key":{"json":"json for javascript"}},value 是JSONObject的JSON格式。

 JSON和XML的比较

json:

  • JSON 是纯文本
  • JSON 具有“自我描述性”(人类可读)
  • JSON 具有层级结构(值中存在值)
  • JSON 可通过 JavaScript 进行解析

与xml相比json的优点在于:

没有结束标签,更便于阅读,读写速度更快,可以使用数组,能够进行嵌套具有层级结构。

下面有代码展示一下对比效果:

XML的

<?xml version="1.0" encoding="utf-8"?>
<country>
    <name>中国</name>
    <province>
        <name>黑龙江</name>
        <cities>
            <city>哈尔滨</city>
            <city>大庆</city>
        </cities>
    </province>
    <province>
        <name>广东</name>
        <cities>
            <city>广州</city>
            <city>深圳</city>
            <city>珠海</city>
        </cities>
    </province>
    <province>
        <name>台湾</name>
        <cities>
            <city>台北</city>
            <city>高雄</city>
        </cities>
    </province>
    <province>
        <name>新疆</name>
        <cities>
            <city>乌鲁木齐</city>
        </cities>
    </province>
</country>

JSON的

{
    "name": "中国",
    "province": [{
        "name": "黑龙江",
        "cities": {
            "city": ["哈尔滨", "大庆"]
        }
    }, {
        "name": "广东",
        "cities": {
            "city": ["广州", "深圳", "珠海"]
        }
    }, {
        "name": "台湾",
        "cities": {
            "city": ["台北", "高雄"]
        }
    }, {
        "name": "新疆",
        "cities": {
            "city": ["乌鲁木齐"]
        }
    }]
}

可以看到,JSON 简单的语法格式和清晰的层次结构明显要比 XML 容易阅读,并且在数据交换方面,由于 JSON 所使用的字符要比 XML 少得多,可以大大得节约传输数据所占用的带宽。

JSON对象说明

JSON对象语法规则:

  • 数据在名称/值对中,如{"domain":"sojson.com"}
  • 可以多对键值对,如{"domain":"sojson.com","author":"soゝso","email":"[email protected]"}
  • 值里面可以有数组(Array),如{"domain_array":["sojson.com","soso.pub","soso.run","isoso.xin","isoso.xin"]}

JSON对象在花括号中,对象可以包含多个名称/值对,如下代码所示:

{
    "name": "小李",
    "age": 22,
    "birthday": "1994年6月30日",
}

JSON 使用 JavaScript 获取元素值:

因为 JSON 使用 JavaScript 语法,所以无需额外的软件就能处理 JavaScript 中的 JSON

var json =  {
        "name": "小李",
        "age": "22"
}

获取name和age

var name = json.name;
alert("name:" + json.name);
var age = json.age;
alert("age:" + json.age);

特殊情况: 

当我们对象里有特殊的Key,或者不是字符串的Key,处理起来稍微有点麻烦。

就上面的Demo,我们取name,那么就是json.name就可以取到“小李”。其实很好理解这个点“.”就是类似于“的”的感觉,json的name。

但如果是以下数据

var json = {
    "1": {
        "name": "小李",
        "age": "22"
    },
    "2": {
        "name": "小张",
        "age": "20"
    }
};
alert(json.1.name);// X 错误 throw Uncaught SyntaxError;

按我们刚刚的逻辑直接点,那么我们要取到“小张”就应该是。json.1.name吧,但是你会发现报错,错误信息应该是Uncaught SyntaxError,语法错误,请自行测试,

//正确的打开姿势如下:
alert(json[1].name);
alert(json["1"].name);
alert(json["1"]["name"]);
//错误,undefined
alert(json["1"][name]);

 问题就是数值可以不带引号,String必须带引号。

猜你喜欢

转载自blog.csdn.net/baipangtu/article/details/107279247