JSON
JSON 起源
JSON 全称 JavaScript Object Notation 。是处理对象文字语法的 JavaScript 编程语言的一个子集。JSON 早已成为与语言无关的语言,并作为自己的标准存在。
JSON 样例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
{ "data" :[ { "id" : "1" , "name" : "A同学" , "state" : "1" , "createTime" : "2020-01-21" }, { "id" : "2" , "name" : "B同学" , "state" : "1" , "createTime" : "2020-01-21" }, { "id" : "3" , "name" : "C同学" , "state" : "0" , "createTime" : "2020-01-21" } ] } |
Python 原生支持 JSON
Python 带有一个内置包 json,用于对 JSON 数据进行编码和解码。
引用方式。
1
|
import json |
JSON 编码的过程通常称为序列化。该术语是指将数据转换为一系列字节通过网络存储或传输。反序列化是解码以 JSON 标准存储或交付的数据的交互过程。
序列化 JSON
直观的转换将简单的 Python 对象转换为 JSON。
Python | JSON |
---|---|
dict | object |
list,tuple | array |
str | string |
int, long,float | number |
True | true |
False | false |
None | null |
简单的序列化示例
创建一个简单的数据。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
data = { "data" :[ { "id" : "1" , "name" : "A同学" , "state" : "1" , "createTime" : "2020-01-21" }, { "id" : "2" , "name" : "B同学" , "state" : "1" , "createTime" : "2020-01-21" }, { "id" : "3" , "name" : "C同学" , "state" : "0" , "createTime" : "2020-01-21" } ] } |
数据直接以文本方式保存。
1
2
|
with open ( "data_file.json" , "w" ) as f: json.dump(data, f) |
数据直接以字符串方式使用。
1
|
json_str = json.dumps(data) |
JSON 反序列化
在 json 库中使用 load() 和 oads() 用于将 JSON 编码数据转换为 Python 对象。
JSON | Python |
---|---|
object | dict |
array | list |
string | str |
number(整数) | int |
number(浮点数) | float |
true | True |
false | False |
null | None |
简单的反序列化示例
读取写入json文件的数据。
1
2
|
with open ( "data_file.json" , "r" ) as read_file: data = json.load(read_file) |
字符串数据。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
json_string = """ { "data":[ { "id": "1", "name": "A同学", "state": "1", "createTime": "2020-01-21" }, { "id": "2", "name": "B同学", "state": "1", "createTime": "2020-01-21" }, { "id": "3", "name": "C同学", "state": "0", "createTime": "2020-01-21" } ] } """ data = json.loads(json_string) |
应用案例
通过互联网的数据抓取解析文本信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 秦皇岛煤炭网微博 import requests from bs4 import BeautifulSoup import datetime url = "http://news.cqcoal.com/manage/newsaction.do?method:webListPageNewsArchivesByTypeid" post_param = { 'pageNum' : '1' , 'pageSize' : '20' , 'jsonStr' : '{"typeid":"238"}' } return_data = requests.post(url,data = post_param) return_data = return_data.content.decode( "utf-8" ) import json for i in json.loads(return_data)[ "rows" ]: title = i[ "title" ] url = "http://news.cqcoal.com/blank/nc.jsp?mid=" + str (i[ "id" ]) timeStamp = int (i[ "pubdate" ]) dateArray = datetime.datetime.utcfromtimestamp(timeStamp) date = dateArray.strftime( "%Y-%m-%d" ) print (title,url,date) |
编码和解码
自定义数据。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import json # 基础的数字字典 py_object = { "c" : 0 , "b" : 0 , "a" : 0 } # JSON 编码 json_string = json.dumps(py_object) print (json_string) print ( type (json_string)) { "c" : 0 , "b" : 0 , "a" : 0 } < class 'str' > # JSON 解码 py_obj = json.loads(json_string) print (py_obj) print ( type (py_obj)) { 'c' : 0 , 'b' : 0 , 'a' : 0 } < class 'dict' > |
如果遇到 TypeError: Object of type SampleClass is not JSON serializable 的错误就需要自定义编码和解码了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
import json class Student: def __init__( self , name, roll_no, address): self .name = name self .roll_no = roll_no self .address = address def to_json( self ): ''' 将此类的实例转换为 json ''' return json.dumps( self , indent = 4 , default = lambda o: o.__dict__) class Address: def __init__( self , city, street, pin): self .city = city self .street = street self .pin = pin address = Address( "Bulandshahr" , "Adarsh Nagar" , "203001" ) student = Student( "Raju" , 53 , address) # 编码 student_json = student.to_json() print (student_json) print ( type (student_json)) { "name" : "Raju" , "roll_no" : 53 , "address" : { "city" : "Bulandshahr" , "street" : "Adarsh Nagar" , "pin" : "203001" } } < class 'str' > # 解码 student = json.loads(student_json) print (student) print ( type (student)) { 'name' : 'Raju' , 'roll_no' : 53 , 'address' : { 'city' : 'Bulandshahr' , 'street' : 'Adarsh Nagar' , 'pin' : '203001' }} < class 'dict' > |
以上就是Python读写JSON文件的操作详解的详细内容,更多关于Python读写JSON的资料请关注服务器之家其它相关文章!
原文链接:https://blog.csdn.net/qq_20288327/article/details/124115125