json與jsonpath
對象{}:jsonobject
對象:對象在js中表現為{}括起來的內容,數據結構為{key:value,key:value...}鍵值對的結構,在面向對象的結構中,key為對象的屬性,key所對應的value為對象的屬性值。
取值方式:對象.key 獲取屬性值,這個屬性值的數據類型可以是數字、字符串、數據、對象等
數組[]:JSONArray
數組:在js中是中括號[]括起來的內容,數據結構類似此格式["Python", "javascript", "C++", ...]
取值方式:類似python語言中的列表,使用索引進行取值,數組中的值可以是數字、字符串、數組、對象等
json方法
1、load()將數據加載成為json類型的數據
讀取json文件中的字符串,轉化成為python數據類型
如:
obj = json.load(open('book.json', 'r', encoding='utf-8'))
print(type(obj))
2、loads()解碼json字符串為json數據
將json格式字符串解碼轉換成為python對象,從json到python的數據數據轉化類型可以對照圖表
with open('./book.json',mode='r',encoding='utf-8') as f:
json_string = f.read()
# 將json格式字符串轉化為對象
obj = json.loads(json_string)
print(type(obj))
3、string串
將json數據
4、dumps()
實現python數據類型轉化成為json字符串,返回一個str對象,把python對象編碼轉換成為json字符串
從python原始類型向json類型轉化的對照表如下:
如下:
import json
str = '''{"has_more": false, "message": "success", "data": [{"single_mode": true, "abstract": "\u8c22\u8c22\u5927\u5bb6\u559c\u6b22\u6bcf\u65e5\u64b8"}]}'''
print(type(str))
print(json.dumps(str,ensure_ascii=False))
5、dump
將python類型序列化成json對象后寫入文件
如:
import json
dictStr = {"city": "北京", "name": "大劉",'info':'\u8c22\u8c22\u5927'}
# Serialize ``obj`` as a JSON formatted stream to ``fp
json.dump(dictStr, open("dictStr.json","w",encoding='utf-8'), ensure_ascii=False,)
6、練習總結
import json
# 將文件中的文件讀取處理,輸出的數據類型為流(字符序列)數據
fp = open("json數據.json",mode="r",encoding="utf8")
# 將流數據加載變成json類型的數據
j = json.load(fp)
print(j,type(j))
# 輸出結果:
# {'book': [{'name': '時間簡史', 'author': '斯蒂芬·威廉·霍金'}, {'name': '三國演義', 'author': '羅貫中'}]} <class 'dict'>
# 將json類型的數據轉化成為python的字符串類型的數據,並將中文的阿斯克碼形式轉化成中文
a = json.dumps(j,ensure_ascii=False)
print(a,type(a))
# 輸出結果
# {"book": [{"name": "時間簡史", "author": "斯蒂芬·威廉·霍金"}, {"name": "三國演義", "author": "羅貫中"}]} <class 'str'>
# 創建一個json格式的文件
fp2 =open("json練習二.json",mode="a",encoding="utf8")
# 將json數據寫入文件中,並將阿斯克碼轉換設置為False
json.dump(j,fp2,ensure_ascii=False)