参考博客:https://www.cnblogs.com/haiyan123/p/7829080.html

1、json(Javascript  Obiect  Notation,JS对象标记)是一种轻量级的数据交换格式。

2、json其实是从js中拿出来的一个对象,也可以说json是js的一个子集。

清楚:json的格式来源于js的格式

附上json和js,python数据类型之间的转换关系:注意一点:bool类型json字符串里时小写的true和false

js和json简单对比

1、js支持单引号,也支持双引号,也可以没有引号

  //在js中吧{}这样的类型叫做对象,js中没有字典一说
data = {
'name':'',
"name":"",
name:""
} //js对象默认会把自己的键当成字符串处理,所以可以加引号也可以不加

2.json的格式

1、json只认双引号的
2、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;} // 不能使用函数和日期对象
}

python中的序列化(dumps)和反序列化(loads)

 import json
i = 10
s = "dsfdsf"
l = [11,22,33]
dic = {"name":"haiyna","age":22}
b = True
# #吧基本数据类型转换成字符串的形式
print(json.dumps(i),type(json.dumps(i))) #10 <class 'str'>
print(json.dumps(s),type(json.dumps(s))) #"dsfdsf" <class 'str'>
print(json.dumps(l),type(json.dumps(l))) #[11, 22, 33] <class 'str'>
print(json.dumps(dic),type(json.dumps(dic))) #{"name": "haiyna", "age": 22} <class 'str'>
print(json.dumps(b),type(json.dumps(b))) #true <class 'str'> # ===============json反序列化=============
d = {"a":1,"b":"fdgfd"}
data = json.dumps(d)
print(data,type(data))
f = open("a.txt","w")
f.write(data) #注意这会写进去的字符串时双引号的格式
f.close() # ===============json序列化=============
f = open("a.txt","r")
datat = f.read()
print(datat,type(datat)) #{"a": 1, "b": "fdgfd"} <class 'str'>
data = json.loads(datat)
print(data,type(data)) #{'a': 1, 'b': 'fdgfd'} <class 'dict'>

JS中的序列化(stringify)与反序列化(parse)

JSON.stringify():用于将一个JavaScript对象转换为JSON字符串

JSON.parse():用于将一个JSON字符串转换为JavaScript对象

 <script>
//===========js中的json序列化===========
s = '{"name":1}';
var data = JSON.parse(s);
console.log(data);
console.log(typeof data); //object
//===========js中的json的反序列化=======
s2={'name':'yuan'};
console.log(JSON.stringify(s2),typeof JSON.stringify(s2)) //string
</script>

json和xml的比较

1、XML也是存数据的一种格式,也是一种标记语言。它是利用节点进行查找的

2、JSON 格式于2001年由 Douglas Crockford 提出,目的就是取代繁琐笨重的 XML 格式。

JSON 格式有两个显著的优点:书写简单,一目了然;符合 JavaScript 原生语法,可以由解释引擎直接处理,不用另外添加解析代码。所以,JSON迅速被接受,已经成为各大网站交换数据的标准格式,并被写入ECMAScript 5,成为标准的一部分。

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格式取代了xml给网络传输带来了很大的便利,但是却没有了xml的一目了然,尤其是json数据很长的时候,我们会陷入繁琐复杂的数据节点查找中。
但是国人的一款在线工具 BeJson 、SoJson在线工具让众多程序员、新接触JSON格式的程序员更快的了解JSON的结构,更快的精确定位JSON格式错误。
 

最新文章

  1. Forward-backward梯度求导(tensorflow word2vec实例)
  2. 【转载】Mysql 查看连接数,状态
  3. icon-font与svg
  4. 用SQL语句添加删除修改字段_常用SQL
  5. Mac下同时安装多个版本的JDK
  6. IOS手势UIGestureRecognizer
  7. HDU 1272 小希的迷宫(并查集)
  8. Java [Leetcode 204]Count Primes
  9. 得到RTP包中的timestamp
  10. 基于HTML5及WebGL开发的2D3D第一人称漫游进行碰撞检测
  11. C# 读写文本文件乱码解决方案
  12. Android Studio 快速开发
  13. Runtime之NSCoding的自动归档、接档
  14. 使用VSCode 编译调试QT程序
  15. CAdvisor container monitor
  16. 关于分布式版本控制系统Git与集中式版本控制系统SVN的区别
  17. 【PyQt5-Qt Designer】pyqtSignal()-高级自定义信号与槽
  18. (zhuan) 自然语言处理中的Attention Model:是什么及为什么
  19. js &amp; replaceAll &amp; Regex
  20. 网络协议栈学习(一)socket通信实例

热门文章

  1. 转,如果linux不能用yum安装asterisk时,可以库参照以下办法添加asterisk仓库
  2. JSON标准格式
  3. 5.js屏蔽方向键,兼容IE和firefox
  4. atom 的一些东东
  5. 上传图片时压缩图片 - 前端(canvas)做法
  6. mysql : mysql 5.6.13 免安装版配置
  7. ununtu 下安装 Nvidia 显卡驱动
  8. java 内存管理机制
  9. c++ _宏与内联函数
  10. Codeforces1107E Vasya and Binary String 记忆化dp