一、什么是json?

json的全称为:JavaScript Object Notation,是一种轻量级的数据交互格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。【以上来自于百度百科】

简单来说:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互。
类似于:

二、与javascript的关系

事实上几乎所有编程语言中都有对json数据转换的支持:
js中,json与对象的转换:JSON.parse()/JSON.stringify();
php中,json与数组的转换:json_encode()/json_decode();
java中,json与对象的转换:fromJson()/toJson();
python中,json与对象的转换:json.dumps()/json.loads();

三、语法格式

son数据格式:主要由对象 { } 和数组 [ ] 组成:

其中对象包括键值对(属性:属性值){key: value},value 可为 str,num,list,obj。取值使用 objcet.key

{key: value, key2:value2,} 键:值用冒号分开,对间用,连接

数组包含元素:num,str,list,objcet 都可以,利用索引访问 [index],用 . 连接各个值:

e.g:

var stu = {"student":           //stu 对象包含student的key,值为一个数组
[                                     //数组的每一个值为一个具体的学生对象
{"name": "Tom","Grade":1, "age":11, "gender": "M"},     //学生对象的键为名字,值为对应属性
{"name": "Jerry", "Grade":1, "age":10, "gender": "M"}       //每个属性对应的是一个key,value对
],
"classroom": {"class1": "room1", "class2": "room2"}         //对象的值,嵌套对象
};
读取数据:

document.write(stu.student[1].name);     // 输出第二个学生名
document.write(stu.student[0].age);      // 输出第一个学生年龄
document.write(stu.classroom.class1);    // 输出 classroom 的 class1 值
document.write(stu["classroom"].class2); // 也可用中括号键访问对象值

四、注意事项

为什么说几乎相同,而不是完全相同呢?接下来我们要说的就是json与js中对象的不同点,也是json严格要求的部分:

  • json的键值对的部分,必须用双引号"包裹,单引号都不行(所以如果在键中出现了关键字,也被字符化了),而js中对象没有强制要求(所以在键中不允许出现关键字)
  • json的键值对的部分,不允许出现函数functionundefinedNaN,但是可以有null,js中对象的值中可以出现
  • json数据结束后,不允许出现没有意义的逗号,如:{"name":"admin","age":18,},注意看数据结尾部分18的后面的逗号,不允许出现

五、总结

所以,json数据的格式可以是:

{"name":"admin","age":18}
也可以是:
["hello",3.1415,"json"]
还可以是:
[
{"name":"admin","age":18},
{"name":"root","age":16},
{"name":"张三","age":20}
]

不能是:(key没有双引号)
{"name":"admin",age:18}
不能是:(无意义的逗号)
{"name":"admin","age":18,}
不能是:(不允许出现函数)
{"name":"admin","age":18,"show":function()()}
不能是:(不允许出现undefined)
{"name":"admin","age":18,"show":undefined}
不能是:(不允许出现NaN)
{"name":"admin","age":18,"strong":NaN}
不能是:(无意义的逗号)
["hello",3.1415,"json",]
不能是:(无意义的逗号)
[
{"name":"admin","age":18},
{"name":"root","age":16},
{"name":"张三","age":20},
]

嵌套 JSON 对象中的数组

JSON 对象中数组可以包含另外一个数组,或者另外一个 JSON 对象:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>

<p>循环内嵌数组:</p>

<p id="demo"></p>

<script>

var myObj, i, j, x = "";
myObj = {
    "name":"网站",
    "num":3,
    "sites": [
        { "name":"Google", "info":[ "Android", "Google 搜索", "Google 翻译" ] },
        { "name":"Runoob", "info":[ "菜鸟教程", "菜鸟工具", "菜鸟微信" ] },
        { "name":"Taobao", "info":[ "淘宝", "网购" ] }
    ]
}

for (i in myObj.sites) {
    x += "<h1>" + myObj.sites[i].name + "</h1>";
    for (j in myObj.sites[i].info) {
        x += myObj.sites[i].info[j] + "<br>";
    }
}

document.getElementById("demo").innerHTML = x;

</script>

</body>
</html>

 

 

 

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐