Python和JSON

Python和JSON

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分钟了,自定义对象咱们明天再说。

推荐阅读

表弟说,这个Python定时任务,能挣五千,问我信吗?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值