前言:
此时你们对“python unicode转string”可能比较着重,我们都想要剖析一些“python unicode转string”的相关文章。那么小编在网摘上汇集了一些有关“python unicode转string””的相关文章,希望同学们能喜欢,同学们一起来学习一下吧!概要
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,目前被广泛应用,在实际使用过程中不管是开发工程师还是测试工程师都必须学会json数据的处理。
Python中有几个库可以比较好的处理json数据,比如内置库json、外部库Demjson、jsonpath。本章主要介绍内置库json的使用。
学习目录
json数据实际上是特殊格式的字符串
json数据和python数据类型对照表
内置json库
通过import json导入json库,提供了四个常用的函数
json.loads()使用
json.dumps()使用
json.dump()使用
json.load()使用
json.dump和json.dumps函数的参数
Json数据实际上是特殊格式的字符串
#定义一个json字符串json_data = '{"name":"lili","age":20}'print(f'json数据是否是字符串: {isinstance(json_data,str)}')#打印结果json数据是否是字符串: Truejson数据和python数据类型对照表
json字符串和python数据转换的对照表如下
JSON
Python
object
dict
array
list、tuple
string
unicode、str
number (int)
int, long
number (real)
float
true
True
false
False
null
None
内置json库通过import json导入json库,提供了四个常用的函数
函数
描述
json.dumps()
将Python对象转换成JSON字符串
json.loads()
将已编码的 JSON 字符串转换为Python对象
json.dump()
将为Python对象转换为JSON文件对象
json.load()
将JSON文件对象转换为Python对象
Json.loads()使用
定义一个json数据
json_data = '{"name":"lili","age":20,"address":["china","js","nj"], "man":true,"woman":false,"money":null}'
传入json数据转换为python对象
python_dictinfo = json.loads(json_data)print(f'json数据转换后为字典: {isinstance(python_dictinfo,dict)}')#json数据转换后为字典json数据转换后为字典: True转为字典后就可以对其进行字典的一些操作#提取key对应的值print(f"name : {python_dictinfo['name']}")print(f"address : {python_dictinfo['address']} 该项是python的列表:{isinstance(python_dictinfo['address'],list)}")#打印结果name : liliaddress : ['china', 'js', 'nj'] 该项是python的列表:Truejson.dumps()使用
定义一个字典
python_dictinfo = {'name': 'lili', 'age': 20, 'address': ['china', 'js', 'nj'], 'man': True, 'woman': False, 'money': None}
传入字典转换为json数据
json_data = json.dumps(python_dictinfo)print(f'转换后的json数据: {json_data}')#打印结果转换后的json数据: {"name": "lili", "age": 20, "address": ["china", "js", "nj"], "man": true, "woman": false, "money": null}json.dump()使用
定义一个字典
python_dictinfo = {'name': 'lili', 'age': 20, 'address': ['china', 'js', 'nj'], 'man': True, 'woman': False, 'money': None}
传入字典和文件对象将数据写入json文件
#写入test.json文件with open('test.json','w') as fd: json.dump(python_dictinfo,fd)
程序执行后在本地会生成一个test.json文件,内容如下:
{"name": "lili", "age": 20.0, "address": ["china", "js", "nj"], "man": true, "woman": false, "money": null}
json.load()使用
传入文件对象,解析为字典
with open('test.json','r') as fd: python_dictinfo = json.load(fd) print (f'解析出的字典: {python_dictinfo}')
解析出的字典: {'name': 'lili', 'age': 20.0, 'address': ['china', 'js', 'nj'], 'man': True, 'woman': False, 'money': None}
json.dump和json.dumps函数的参数
这两个函数的一些参数配置可使转换后的json数据更美观更容易阅读
默认的参数如下:skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=Falsesort_keys参数
如果传入sort_keys为True,转换为json时讲按照传入的字典进行排序。
python_dictinfo = { 'name': 'lili', 'age': 20}json_data = json.dumps(python_dictinfo,sort_keys=True)print(f'转换后的json数据: {json_data}')#打印排序后的结果 转换后的json数据: {"age": 20, "name": "lili"}indent参数
indent传入的是非负整数,则JSON数组元素和对象成员将使用该缩进进行漂亮的打印
python_dictinfo = {"name":"lili","age":20.00,"address":["china","js","nj"],"man":True,"woman":False,"money":None}json_data = json.dumps(python_dictinfo,indent=4)print(f'转换后的json数据: {json_data}')
转换后的json数据: {"name": "lili","age": 20.0,"address": [ "china", "js", "nj" ],"man": true,"woman": false,"money": null}separators参数
表示“分隔符”,默认值为(',',':'),如果指定为其他的元组,比如('a','b'),意味着原来的逗号会被替换为a,原来的冒号会被替换为b,并去掉后面的空格。
python_dictinfo = python_dictinfo = { 'name': 'lili', 'age': 20}json_data = json.dumps(python_dictinfo,separators=('a','b'))print(f'转换后的json数据: {json_data}')
#打印结果转换后的json数据: {"name"b"lili"a"age"b20}skipkeys参数
默认值是False,如果“skipkeys”为True,则非python基本数据类型的“dict”键
(“str”、“int”、“float”、“bool”、“None”),将被跳过而不会引发“TypeError”。
#定义一个元组的键python_dictinfo = {'name': 'lili', 'age': 20, ('china', 'js', 'nj'): None}json_data = json.dumps(python_dictinfo)print(f'转换后的json数据: {json_data}')
#执行后报错TypeError: keys must be str, int, float, bool or None, not tuple
添加参数skipkeys=True json_data = json.dumps(python_dictinfo,skipkeys=True)print(f'转换后的json数据: {json_data}')#打印结果 会忽略掉元组键值转换后的json数据: {"name": "lili", "age": 20}ensure_ascii参数
默认值True,输出ASCLL码,如果配置为False,可以输出中文。
python_dictinfo = {'name': '王磊', 'age': 20 }json_data = json.dumps(python_dictinfo)print(f'转换后的json数据: {json_data}')#结果如下转换后的json数据: {"name": "\u738b\u78ca", "age": 20}
配置为False后可打印中文
json_data = json.dumps(python_dictinfo,ensure_ascii=False)print(f'转换后的json数据: {json_data}')#结果如下转换后的json数据: {"name": "王磊", "age":20}check_circular参数
如果check_circular为false,则跳过对容器类型的循环引用检查,循环引用将导致溢出错误(或更糟的情况)。
allow_nan参数
默认为True,序列化超出范围的浮点值(nan、inf、-inf)转为json格式 (nan、Infinity、-Infinity)。如果为False,则执行时会报错。
python_dictinfo = {'name': 'lili', 'age': float('inf')}json_data = json.dumps(python_dictinfo,allow_nan=False)# allow_nan=False 则执行时会报错ValueError: Out of range float values are not JSON compliant: inf
共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
--感谢读者的阅读和学习,谢谢大家。
标签: #python unicode转string #python类型转换as #python获取json数据中values