1.介绍
Python常用的数据格式有JSON和YAML,有时数据需要从一种格式转化为另一种。在Python中,我们可以使用json、yaml库将JSON和YAML格式的数据转为字典(dict)类型,以及将Python的字典数据转换为JSON/YAML字符串。
下面我们来学习在Python中如何将JSON、YAML、dict之间进行转换。
2.dict转JSON/YAML
2.1 dict转JSON
使用Python内置的json库可以轻松将Python字典转换为JSON格式的字符串。可以通过json.dumps()
实现:
import json
#字典类型data
data = {
'name': 'Tom',
'age': 20,
'gender': 'male'
}
# 将数据转换为JSON格式字符串
json_str = json.dumps(data)
print("JSON字符串:", json_str)
上面的代码输出结果为:
{"name": "Tom", "age": 20, "gender": "male"}
2.2 dict转YAML
使用Python库pyyaml,可以将Python字典转换为YAML格式的字符串。
使用方法如下:
import yaml
data = {
'name': 'Tom',
'age': 20,
'gender': 'male'
}
yml_str = yaml.dump(data)
print("YAML字符串:", yml_str)
上面的代码输出结果为:
age: 20gender: male
name: Tom
3.JSON/YAML转dict
3.1 JSON转dict
使用Python内置的json库的json.loads()
方法可以将JSON字符串转换为Python字典类型。
import json
json_data = '{"name": "Tom", "age":20, "gender": "male"}'
data = json.loads(json_data)
print("转换后数据类型:", type(data))
print("字典数据:", data)
上面的代码输出结果为:
转换后数据类型: <class 'dict'>字典数据: {'name': 'Tom', 'age': 20, 'gender': 'male'}
3.2 YAML转dict
使用Python库pyyaml,可以轻松将YAML格式的字符串转换为Python字典。
使用方法如下:
import yaml
yml_data = """
name: Tom
age: 20
gender: male
"""
data = yaml.load(yml_data, Loader=yaml.FullLoader)
print("转换后数据类型:", type(data))
print("字典数据:", data)
上面的代码输出结果为:
转换后数据类型: <class 'dict'>字典数据: {'name': 'Tom', 'age': 20, 'gender': 'male'}
4.JSON/YAML字符串转字典并处理中文乱码
4.1 中文乱码处理
在进行JSON、YAML字符串转字典时有时候会遇到中文乱码的情况,这时我们需要在编码时指定'ensure_ascii'=False参数进行处理。示例如下:
import json
import yaml
json_data = '{"品牌": "苹果", "型号": "iPhone12", "价格": 10000}'
data_dict = json.loads(json_data, ensure_ascii=False)
print("数据类型:", type(data_dict))
print("字典数据:", data_dict)
yml_data = '''
品牌: 华为
型号: Mate40
价格: 10000
'''
data_dict = yaml.load(yml_data, Loader=yaml.FullLoader, encoding='utf-8', yaml.RoundTripLoader)
print("数据类型: ", type(data_dict))
print("字典数据: ", data_dict)
上面的代码输出结果分别为:
数据类型: <class 'dict'>字典数据: {'品牌': '苹果', '型号': 'iPhone12', '价格': 10000}
数据类型: <class 'dict'>
字典数据: {'品牌': '华为', '型号': 'Mate40', '价格': 10000}
4.2 对象转JSON/YAML并指定缩进、排序等参数
在实际开发中,我们会有一些需求:比如一个字典较大(或者嵌套层数较深),我们将其转化为对应的JSON/YAML字符串时,可以对其进行缩进、排序等操作。具体如下:
import json
import yaml
data = {
"groupA": [
{"name": "Tom", "age": 20, "gender": "male"},
{"name": "Lily", "age": 21, "gender": "female"}
],
"groupB": [
{"name": "Tim", "age": 22, "gender": "male"},
{"name": "Tom", "age": 23, "gender": "female"}
]
}
# 将字典转为json字符串,并指定缩进、排序等参数
json_str = json.dumps(data, indent=2, sort_keys=True)
print("JSON字符串: \n", json_str)
# 将字典转为yaml字符串,并指定缩进、排序等参数
yml_str = yaml.dump(data, indent=4, sort_keys=True)
print("YAML字符串: \n", yml_str)
上述代码主要实现以下两个需求:
将字典转为json字符串,并指定缩进、排序等参数
将字典转为yaml字符串,并指定缩进、排序等参数
上述代码的结果:
JSON字符串:
{
"groupA": [
{
"age": 20,
"gender": "male",
"name": "Tom"
},
{
"age": 21,
"gender": "female",
"name": "Lily"
}
],
"groupB": [
{
"age": 22,
"gender": "male",
"name": "Tim"
},
{
"age": 23,
"gender": "female",
"name": "Tom"
}
]
}
YAML字符串:
groupA:
- age: 20
gender: male
name: Tom
- age: 21
gender: female
name: Lily
groupB:
- age: 22
gender: male
name: Tim
- age: 23
gender: female
name: Tom
总结
Python中常见的数据格式有JSON、YAML和Python的字典类型,而要将JSON/YAML格式的数据转为字典、将字典转为JSON/YAML字符串,在Python中也十分简单。
本文介绍了使用json和pyyaml库将JSON/YAML格式数据转为Python字典类型,以及将Python字典数据转换为JSON/YAML字符串。
在实际开发中,还需要掌握如何对JSON/YAML字符串进行缩进、排序等详细操作,以直观地呈现出数据。