簡體   English   中英

如何從 python 中的 json 讀取字節?

[英]How to read bytes from a json in python?

我得到了一個 json 文件,其中包含 utf-8 轉義字符(因為它有西里爾文數據)。 這是我從 API 請求中得到的響應。

該文件看起來與此類似(我只顯示結構,因為它真的很長):

b'{"objectId":"39:0:0:343",""objectData":{"objectName":"\xd0\xa3\xd0\xba\xd1\x80\xd1\x8b\xd1\x82\xd0\xb8\xd0\xb5 \xe2\x84\x96198","removed":0,"objectAddress":{"district":null,"districtType":"\xd0\xbd\xd0\xb5\xd0\xbe\xd0\xbf\xd1\x80",}},"oldNumbers":[{"tempId":0}, {"regionKey":139}]}'

據我了解,我需要將此字節解碼為具有普通西里爾字母 UTF-8 字符的字符串,因為我需要制作 pandas Dataframe。 I have tried pd.read_json, json.load(), json.loads(), but every time I get different errors because Python opens the json as a string, not a byte. 我無法執行bytes.decode('utf-8) ,因為我不知道如何將 .json 讀取為一個字節。

當我嘗試open(filename, 'rb')時,它返回一個 BufferedReader object,而不是字節對象!

我只用了兩天 json,所以如果我的問題聽起來很愚蠢,我很抱歉。 ———————————————————————

為了清楚起見,我將給出我的確切代碼:

with open(os.getcwd() + "/39_00_000000_343.json", encoding='utf-8') as f:
    json_data = json.loads(f.read())

它引發json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)據我了解,這是因為字節未轉換為 Unicode 文本,文件以“b”開頭。

嘗試open(filename, encoding="utf-8")

這將為您提供已解碼的 Unicode 字符串。

回復:用於生成文件內容的代碼:

r2 = requests.get(url)
with open('saint-p/passports/' + cad + '.json', 'w', encoding='utf-8') as output_file:
    output_file.write(r2.text)

所有這些編碼復雜性的訣竅是意識到字節是 Unicode 字符串的原始編碼形式。 在 Python 中,unicode 字符串字符“看起來”像一個單元,但可以“編碼”成兩個或多個字節,具體取決於您使用的編碼。

因此,在這種情況下,JSON 作為 HTTP 響應中的編碼字節來自服務器。 然后請求庫為您將其解碼為.text Unicode 字符串屬性。 然后,您將打開一個文件,該文件接受 Unicode 字符串進行寫入,並自動為您將編碼的“utf-8”字節寫入文件。 然后你做相反的事情,讓 python 打開一個“utf-8”字節編碼文件,並在 read() 上自動將其解碼為 Unicode 字符串。

最后,然后將 Unicode 字符串輸入 JSON 解碼器。

因此,如果您要跳過中間文件,它將如下所示:

r2 = requests.get(url)
json_data = json.loads(r2.text)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM