内容接上一节《物联网全栈工程师学习笔记之JSON学习一》
八、JSON的语法
JSON的语法衍生于JavaScript对象标记语法:
- 数据在名称/值对中
- 数据由逗号分隔
- 花括号容纳对象
- 方括号容纳数组
8.1JSON名称/值对
8.1.1 JSON数据的书写格式是:key/value(健/值)对。
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
- “name”:”Huawei_IoT”
- “deviceCode”:”123456789”
等价于这条JavaScript语句:
- name = “Huawei_IoT”
- deviceCode:”123456789”
8.1.2 JSON值类型
JSON数据值类型可以是以下内容:
-
数字(整数或浮点)
-
字符串(在双引号中)
-
逻辑值(true或false)
-
数组(在中括号中)
-
对象(在大括号中)
-
Null
8.1.2.1 JSON数字、布尔和null类型 -
JSON数字可以是整数型或者浮点型:
{“age”:30}
-
JSON布尔值可以是true或者false:
{“flag”:true}
-
JSON可以设置null值:
{“runoob”:null}
8.1.2.2 JSON对象类型
JSON对象在大括号({})中书写,对象可以包含多个key/value(健/值)对:
{"dataname":"humidity","value":40,"abnormity":0}
对象类型与JavaScript语句等价:
dataName = “humidity”
Value = 40
Abnormity = 0
key必须是字符串,value可以是合法的JSON数据类型(字符串、数字、对象、数组、布尔值或null).
- Key和value中使用冒号(:)分割。
- 每个key/value对使用逗号(,)分割。
8.1.2.3 JSON对象访问
你可以使用点号(.)来访问对象的值:
Var myObj,x;
myObj = {"dataname":"humidity","value":40,"abnormity":0};
X = myObj.dataname;
你也可以使用括号([])来访问对象的值:
Var myObj,x;
myObj = {"dataname":"humidity","value":40,"abnormity":0};
X = myObj[“dataname”];
8.1.2.4 JSON循环对象
你可以使用for-in来循环对象的属性:
Var myObj = {“name”:”runoob”,”alexa”:10000,”site”:null};
For(x in myObj){
Document.getElementById(“demo”).innerHTML+=x+”<br>”;
}
在for-in循环对象的属性时,使用中括号([])来访问属性的值:
Var myObj = {“name”:”runoob”,”alexa”:10000,”site”:null};
For(x in myObj){
Document.getElementById(“demo”).innerHTML+=myObj[x]+”<br>”;
}
8.1.3 JSON对象的嵌套
JSON对象中可以包含另外一个JSON对象:
myObj = {
"name":"runoob",
"alexa":10000,
"sites":{
"site1":"www.baidu.com",
"site2":"m.baidu.com",
"site3":"http.baidu.com",
}
}
可以使用点号(.)或者中括号([])来访问嵌套的JSON对象:
X=myObj.sites.site1;
或者
X = myObj.sites[“site1”];
8.1.4 JSON对象的修改和删除
你可以使用点号(.)来修改JSON对象的值:
MyObj.sites.site1=”www.google.com”;
你可以使用中括号([])来修改JSON对象的值:
MyObj.sites[“site1”]=”www.google.com”;
可以使用关键字delete来删除JSON对象的属性:
Delete myObj.sites.site1;
8.1.5 JSON 数组类型
JSON数组在中括号([])中书写,数组可以包含多个对象:
{"timestamp":1526266000,"content":
[{"dataname":"humidity","value":40,"abnormity":0},
{"dataname":"temperature","value":"25.5℃","abnormity":0},
{"dataname":"luminance","value":276,"abnormity":0}
]
}
上面的例子中,数组”content”是包含三个对象的数组,每个对象代表一条关于某种传感器数据的记录。
8.1.6 JSON数组访问
8.1.7 JSON数组嵌套
8.1.8JSON数组嵌套访问
8.2 JSON的使用
因为JSON使用JavaScript语法,所以无需额外的软件就能处理JavaScript中的JSON。通过JavaScript可以创建一个对象数组,并像这样进行赋值:
Var multiSensor = {"timestamp":1526266000,"content":
[{"dataname":"humidity","value":40,"abnormity":0},
{"dataname":"temperature","value":"25.5℃","abnormity":0},
{"dataname":"luminance","value":276,"abnormity":0}
]
}
使用下标访问JavaScript对象数组中的第一项(索引从0开始):
multiSensory[1].content[0].dataname;
返回的内容是:humidity
8.3 JSON和XML的比较
8.3.1相同之处
- JSON是纯文本
- JSON具有自我描述性(人类可读)
- JSON具有层级结构(值中存在值)
- JSON可通过JavaScript进行解析
JSON数据可使用AJAX进行传输
8.3.2不同之处
- 没有结束标签
- 更短
- 读写的速度更快
- 能够使用内建的JavaScript eval()方法进行解析
- 使用数组
- 不使用保留字
8.4JSON常见的开源库