爬蟲學習(十五)——json解析


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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM