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