python Yaml、Json、Dict之间的转化

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: 20

gender: 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字符串进行缩进、排序等详细操作,以直观地呈现出数据。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签