欢迎访问Python每天3分钟系列。
每天早上8点半,学习或温习一个Python知识点。
今天是第025篇:
Python和JSON
今天早上开车出了个小事故,所以今天的3分钟耽误了。很小的剐蹭,人没事,谢谢大家关心。
JSON是最主流的网络传输格式,但Python对JSON的处理并不友好,下面你会理解。
简单例子
Python自带了一个名为json
的包,无需安装可以直接使用。通过它可以把Python自带对象(str, list, dict等)转成JSON字符串,或者反过来。
先看一个简单的例子:
food = [
{'name':'pizza', 'origin':'Italy'},
{'name':'hamburger', 'origin':'UK'},
]
import json
# 把对象转成JSON字符串
food_json = json.dumps(food)
print(f'检查一下food_json的类型,是字符串:{type(food_json)}')
print('打印一下结果:')
print(food_json)
# 把JSON字符串转成对象
from_json = json.loads(food_json)
print(f'看一下类型,应该是列表:{type(from_json)}')
注释写的也比较清楚了,以下几个要点:
-
food是一个列表,里面是字典存放一个具体的食物的信息。 -
通过 json.dumps
方法可以把Python对象转成JSON字符串。 -
通过 json.loads
方法可以把JSON字符串转回到Python对象
输出结果:
检查一下food_json的类型,是字符串:<class 'str'>
打印一下结果:
[{"name": "pizza", "origin": "Italy"}, {"name": "hamburger", "origin": "UK"}]
看一下类型,应该是列表:<class 'list'>
格式化
现在打印的结果是这样的,如果数据多了并不好看:
[{"name": "pizza", "origin": "Italy"}, {"name": "hamburger", "origin": "UK"}]
我们可以在dumps
函数中指定缩进格式:
#指定缩进4格
food_json = json.dumps(food, indent=4)
这样打印的就漂亮多了:
[
{
"name": "pizza",
"origin": "Italy"
},
{
"name": "hamburger",
"origin": "UK"
}
]
中文例子
前面是英文的例子,换成中文试试:
food = [
{'name':'胡辣汤', 'origin':'山东'},
{'name':'油条', 'origin':'河南'},
]
import json
# 把对象转成JSON字符串
food_json = json.dumps(food, indent=4)
print(food_json)
打印结果竟然是这样的:
[
{
"name": "\u80e1\u8fa3\u6c64",
"origin": "\u5c71\u4e1c"
},
{
"name": "\u6cb9\u6761",
"origin": "\u6cb3\u5357"
}
]
竟然都成了字节码,不好看啊!这是因为json默认用的是ascii码,中文当然不能显示了。
我们可以指定一下编码:
# 加一个参数告诉json这不一定是ascii
food_json = json.dumps(food, ensure_ascii=False, indent=4)
这样结果就好看了:
[
{
"name": "胡辣汤",
"origin": "山东"
},
{
"name": "油条",
"origin": "河南"
}
]
自定义对象例子
对于自定义的类,json就不能转化了,这很坑。而且这明显超过3分钟了,自定义对象咱们明天再说。
今天就说到这里,有问题给我留言。
声明:本网站资源来源于网络收集,如有侵权,请联系站长进行删除处理。 分享目的仅供大家学习和交流,请不要用于商业用途,否则后果自负。本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解。本站资源售价只是赞助,收取费用仅维持本站的日常运营所需。反馈邮箱:1159995880@qq.com
评论(0)