1.什么是json
json(Javascript Obiect Notation,JS对象标记)是一种轻量级的数据交换格式。
json是基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
-
简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
-
易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
json本质是从js中拿出来的一个对象,也可以说json是js的一个子集。也就是说json的格式来源于JS的格式。
2.json使用的规则
1.js中支持单引号,也支持双引号,可以没有引号
//在js中吧{}这样的类型叫做自定义对象,js中没有字典一说 data = { 'name':'xiongda', "name":"xiongda", name:"xiongda" } //js对象默认会把自己的键当成字符串处理,所以可以加引号也可以不加
2.json中支持的格式
-
json只认识双引号
-
json一定是一个字符串(字符串里面只能包含一个对象)
'{"name":"xiongda"}'
3.json的使用
// 合格的json对象 ["one", "two", "three"] { "one": 1, "two": 2, "three": 3 } {"names": ["张三", "李四"] } [ { "name": "张三"}, {"name": "李四"} ] // 不合格的json对象 { name: "张三", 'age': 32 } // 属性名必须使用双引号 [32, 64, 128, 0xFFF] // 不能使用十六进制值 { "name": "张三", "age": undefined } // 不能使用undefined { "name": "张三", "birthday": new Date('Fri, 26 Aug 2011 07:13:10 GMT'), "getName": function() {return this.name;} // 不能使用函数和日期对象 }
3.python和js中的序列化/反序列化
python中的序列化/反序列化
python中序列化和反序列化需要导入模块json
-
json.dumps(obj):将python对象序列化为json格式字符串
-
json.loads(json对象):将json对象反序列化为python对象
import json # s = "{'name':'chao','age':18}" #普通字符串,每加引号的没问题,加了引号的,必须是双引号才能使用json.loads()。 s = '{"name":"xiongda","age":18}' #json字符串,里面必须是双引号 ret = json.loads(s) print(ret,type(ret)) # {'name': 'xiongda', 'age': 18} <class 'dict'> d = {'name': 'xiongda', 'age': 18} ret = json.dumps(d) print(ret,type(ret)) # {"name": "xiongda", "age": 18} <class 'str'>
js中的序列化和反序列化
js中的序列化和反序列化是通过JSON来实现,可以直接使用
-
JSON.stringify():将一个javascript对象转化为json字符串
-
JSON.parse():将一个json字符串转换为javascript对象
<script> // js中的json的序列化 s2={'name':'xiongda'}; console.log(JSON.stringify(s2),typeof JSON.stringify(s2)) //string // js中的json反序列化 s = '{"name":1}'; var data = JSON.parse(s); console.log(data); console.log(typeof data); //object </script>
4.json和xml的比较
-
XML也是存数据的一种格式,也是一种标记语言。它是利用节点进行查找的
-
JSON 格式于2001年由 Douglas Crockford 提出,目的就是取代繁琐笨重的 XML 格式。
SON 格式有两个显著的优点:
-
书写简单,一目了然;
-
符合 JavaScript 原生语法,可以由解释引擎直接处理,不用另外添加解析代码。
所以,JSON迅速被接受,已经成为各大网站交换数据的标准格式,并被写入ECMAScript 5,成为标准的一部分。
json和xml使用实例
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>