![8d9280996ec38760c7147f336704f9d4.png](https://i-blog.csdnimg.cn/blog_migrate/ddfa65bc0014c0f49f5d54ff6089c711.jpeg)
译者得话
在写爬虫程序的过程中,若网站的响应式JSON格式,我们则可以通过提取键值,来获取我们想要的内容。
![60fde04be7c54aa985bd0156cb069c7e.png](https://i-blog.csdnimg.cn/blog_migrate/145971ad02437fe00372fbec8802d038.jpeg)
JSON,全称为JavaScipt Oject Notation,构造简洁但是结构化程度非常高,是一种轻量级的数据交换格式。
实际上,任何支持得类型都可以通过JSON来表示,例如字符串、数字、对象、数组等,但是对象和数组是比较特殊且常用得两种类型。
- 对象:在JavaScript是使用花括号{}包裹起来的内容,数据结构为{key1:value1,key2:value2,......,keyN:valueN}的键值对结构。在面向对象的语言中,key为对象的属性,value为对应的值。键名可以使用整数和字符串来表示。值得类型可以是任意类型。
- 数组:数组在JavaScript是方括号[]包裹起来得内容,数据结构为["java","javascript","vb",...]得索引结构。在JavaScript中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引用得多。同样,值的类型可以是任意类型。
一个标准的JSON对象如下:
{"medical": [
{ "room-number": 100,
"use": "reception",
"sq-ft": 50,
"price": 75
},
{ "room-number": 101,
"use": "waiting",
"sq-ft": 250,
"price": 75
},
{ "room-number": 102,
"use": "examination",
"sq-ft": 125,
"price": 150
},
{ "room-number": 103,
"use": "examination",
"sq-ft": 125,
"price": 150
},
{ "room-number": 104,
"use": "office",
"sq-ft": 150,
"price": 100
}
]
}
这里,[......]相当于列表类型,列表中的每一个元素可以是任意类型,这个示例中它是字典类型,由大括号包围。
而[......]由被一个大括号包围,即一个外字典。这样的写法应该很符合我们日常记录的方法。
这页说明JSON由以上两种形式自由组合而成,可以无限次嵌套,结构清晰,是数据交换的极佳方式。
JSON in Python
JSON可存储列表、布尔值、数字、元组、字典,但要把JSON写进文件,则以上的数据类型需被转换为字符串数据类型,因为只有字符串可被读取或者写进文件中。Python提供JSON模块,用来帮助使用者做数据类型转换。
import json
JSON模块主要用来将python的字典类型数据转换为JSON字符串类型,然后将数据写进文件中
![1c8f231a4dcefe46d0b8b95a0dd8ea89.png](https://i-blog.csdnimg.cn/blog_migrate/ac6f0a69633d5f2e3f6fea5b26313e42.jpeg)
JSON模块也可将JSON字符串转换为字典数据结构。
![743aa3accfb9f18065b009a870dc99f4.png](https://i-blog.csdnimg.cn/blog_migrate/15c549ef0f3744d5b9708c6869249104.png)
Writing a JSON 文件
使用Json.dumps函数可以直接将json字符串丢进文件中。
注意:此时只有JSO格式的字符串才可被写进文件中。
![bc205139b05d18f32a2a319588ed0b30.png](https://i-blog.csdnimg.cn/blog_migrate/71989d1f69716f960a7e15fcca82cc1e.png)
Reading JSON
在JSON文件中读取JSON文件,可以使用Json.load()函数。
![14d35af2fe885d42829f0bf933221646.png](https://i-blog.csdnimg.cn/blog_migrate/85859218de479dba937fcaaa0638c936.png)
异常提示我们.loads的参数必须是:字符串(str)、字节(bytes)、字节数组(bytearray),演示如下:
![5bddd04618e09ed5180736a9e53a3d03.png](https://i-blog.csdnimg.cn/blog_migrate/34421f4adecbfdbd31164615cb30baba.jpeg)