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"))