Python3 Dictionary与JSON
本文最后更新于:2023年4月15日 下午
JSON与Dictionary简介
- Python3
- PyCharm CE
JSON简介
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。
它是一种文本格式。它的结构主要由键值对来构成。
一个键(key)对应一个值(value)。最外围用大括号{ }
包围起来。
例如1
2
3
4{
"firstName": "Rust",
"lastName": "Fisher"
}
大括号括起来的叫做对象结构。
JSON里也可以放数组。用中括号[ ]
括起来。叫做数组结构。1
2
3
4
5
6
7
8
9
10
11
12
13{
"desc":"这个是一个简单的例子",
"userInfo":{
"firstName":"Rust",
"lastName":"Fisher"
},
"books":[
"Python入门",
"Python进阶",
"数据分析",
"可视化"
]
}
对象结构和数组结构可以同时存在,只要满足键值对的要求即可。
最外层也可以是中括号括起来的,里面存放着多个对象。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15[
{
"firstName": "Tom",
"lastName": "Hanks",
"movies": ["Cast Away"]
},
{
"userInfo": {
"firstName": "Rust",
"lastName": "Fisher"
},
"books": ["Python入门", "Python进阶"],
"desc": "可以直接添加一个key-value进去"
}
]
Python的Dictionary(字典)简介
Dictionary(以下简称为dict或字典)是一种键值对数据结构。
有点像Java里的Map和Set。
初始化一个dict可以直接用大括号。里面写上key和value。1
2
3
4
5
6
7
8
9
10def use_dict():
user_info = {'firstName': 'Rust', 'lastName': 'Fisher'}
books = ['Python入门']
books.append('Python进阶')
result = {'userInfo': user_info, 'books': books}
result['desc'] = '可以直接添加一个key-value进去'
print(result)
# 运行结果
# {'userInfo': {'firstName': 'Rust', 'lastName': 'Fisher'}, 'books': ['Python入门', 'Python进阶'], 'desc': '可以直接添加一个key-value进去'}
可以看到,dict和JSON有些类似。都是键值对,都有数组结构。
从Python语法上来看,dict操作起来也比较简单。找到确定的key后,可以直接赋值。
Dictionary 转为JSON
Python中的dict是一种键值对的数据结构。
JSON是一种轻量级的数据交换格式,它是一种文本格式。
它们都是以键值对为基础。那么它们应该能相互转换。
将dict转为JSON,这里利用json
包里提供的dumps
方法。
dumps
方法将传入的dict转换成JSON格式的文本。
引入json
包1
import json
我们写出了第一个dict转JSON的方法1
2
3
4def to_json1(input_dict):
print('input:', input_dict)
jsonTxt = json.dumps(input_dict)
print(jsonTxt)
输出:1
2input: {'userInfo': {'firstName': 'Rust', 'lastName': 'Fisher'}, 'books': ['Python入门', 'Python进阶'], 'desc': '可以直接添加一个key-value进去'}
{"userInfo": {"firstName": "Rust", "lastName": "Fisher"}, "books": ["Python\u5165\u95e8", "Python\u8fdb\u9636"], "desc": "\u53ef\u4ee5\u76f4\u63a5\u6dfb\u52a0\u4e00\u4e2akey-value\u8fdb\u53bb"}
中文字符都变成了字母和数字符号。这有点出乎我们意料。
涉及到中文字符的时候,需要dumps
方法里指定ensure_ascii=False
1 |
|
输出:1
2input: {'userInfo': {'firstName': 'Rust', 'lastName': 'Fisher'}, 'books': ['Python入门', 'Python进阶'], 'desc': '可以直接添加一个key-value进去'}
{"userInfo": {"firstName": "Rust", "lastName": "Fisher"}, "books": ["Python入门", "Python进阶"], "desc": "可以直接添加一个key-value进去"}
这样中文字符就ok了。
list转为JSON
list中存储着多个dict。可以直接把list转为JSON。
接上面的代码
1 |
|
输出的JSON部分:1
[{"firstName": "Tom", "lastName": "Hanks", "movies": ["Cast Away"]}, {"userInfo": {"firstName": "Rust", "lastName": "Fisher"}, "books": ["Python入门", "Python进阶"], "desc": "可以直接添加一个key-value进去"}]
读取JSON文本
用json.loads
方法将输入的JSON文本转为对象。
1 |
|
得到的对象可能是数组或者是dict。
读取JSON文件
先打开文件,用json.load
方法,读取JSON内容1
2
3with open(json_file_path) as json_file:
json_content = json.load(json_file) # 读取出来的是dict
# ...