Python JSON编解码

1.JSON 函数
JSON(JavaScript Object Notation)是一种轻量级的数据格式。
使用JSON函数需要导入json库:import json
json.dumps 将Python 对象编码成JSON字符串
json.loads 将已编码的JSON字符串解码为Python对象

实例1

import json
a = [1,"a","b"]
print("a:",a)
print("type(a):",type(a))
b = json.dumps(a)
print("b:",b)
print("type(b):",type(b))
c = json.loads(b)
print("c:",c)
print("type(c):",type(c))

运行结果

a: [1, 'a', 'b']
type(a): <class 'list'>
b: [1, "a", "b"]
type(b): <class 'str'>
c: [1, 'a', 'b']
type(c): <class 'list'>

a是一个list,用json.dump()编码之后,变为str类型;用json.loads()解码之后又变为list类型。

实例2

import json
d = '[1,2,3]'
print("d:",d)
print("type(d):",type(d))
e = json.loads(d)
print("e:",e)
print("type(e):",type(e))

运行结果

d: [1,2,3]
type(d): <class 'str'>
e: [1, 2, 3]
type(e): <class 'list'>

输入到json.loads()中的数据需要是str类型

实例3

import json
data1 = {"a":1,"b":2}
print("data1:",data1)
print("type(data1):",type(data1))
data2 = json.dumps(data1)
print("data2:",data2)
print("type(data2):",type(data2))

运行结果

data1: {'a': 1, 'b': 2}
type(data1): <class 'dict'>
data2: {"a": 1, "b": 2}
type(data2): <class 'str'>

输入数据data1为dict类型,用json.dumps()编码之后转换为str类型

实例4:

import json
data3 = '{"a":1,"b":2}'
print("data3:",data3)
print("type(data3):",type(data3))
data4 = json.loads(data3)
print("data4:",data4)
print("type(data4):",type(data4))

运行结果

data3: {"a":1,"b":2}
type(data3): <class 'str'>
data4: {'a': 1, 'b': 2}
type(data4): <class 'dict'>

data3是str类型,用json.loads()解码之后为dict类型

2.实践中遇到的问题
在写post请求获取数据是,如果使用如下代码会报错:

data = json.loads(self.request.body)

错误信息
在这里插入图片描述
这是个编码问题,解决方案:
https://stackoverflow.com/questions/42683478/typeerror-the-json-object-must-be-str-not-bytes/42683509

data = json.loads(str(self.request.body.decode("utf-8")))

之前写http请求,获取数据是也遇到这个问题,对body进行"utf-8"编码之后,问题就解决了。

rootObj = json.loads(body.decode("utf-8"))
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值