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"))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章