概念解释
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:
与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":"i@itboy.net"}
- 值里面可以有数组(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必须带引号。