第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

解析包含 \n\t\r 的 JSON 字符串

解析包含 \n\t\r 的 JSON 字符串

炎炎設(shè)計 2023-09-19 14:35:32
我正在使用 requests 庫從 API 調(diào)用中獲取一些數(shù)據(jù),但它總是給我提供錯誤的 JSON 格式。然而,當(dāng)我這樣做時json.loads(),當(dāng)我將其保存\r\t\n在文件中時,它在我的控制臺窗口中是干凈的。import requestsheaders = {    'Connection': 'keep-alive',    'Accept': '*/*',    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36',    'X-Requested-With': 'XMLHttpRequest',    'Sec-Fetch-Site': 'same-origin',    'Sec-Fetch-Mode': 'cors',    'Sec-Fetch-Dest': 'empty',    'Referer': 'https://webapps.illinois.gov/IWCC/CaseDocket/CaseSearch/ResBirthEnquiry?Name=ILLINOIS%20STATE%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20&type=R&caseDet=19_004185',    'Accept-Language': 'en-US,en;q=0.9',}params = (    ('Name', 'ILLINOIS STATE                '),    ('type', 'R'),    ('_', '1601313293712'),)response = requests.get('https://webapps.illinois.gov/IWCC/CaseDocket/CaseSearch/GetBirthInquiryDetails', headers=headers, params=params).json()with open('casedockets.json','w') as outfile:    json.dump(response, outfile, indent=4)它產(chǎn)生以下輸出:"\"{\\r\\n\\\"nameBirthDetails\\\":\\r\\n{\\\"nameBirth10\\\":{\\r\\n\\t   \\\"petName\\\":\\\"MAURO, SEBASTIANO             \\\", \\r\\n\\t   \\\"respName\\\":\\\"ILLINOIS STATE                \\\", \\r\\n\\t   \\\"injuryDate\\\":\\\"11/21/2002\\\",\\r\\n\\t   \\\"caseYear\\\":\\\"03\\\", \\r\\n\\t   \\\"caseType\\\":\\\"WC\\\", \\r\\n\\t   \\\"caseSeqNbr\\\":\\\"003884\\\", \\r\\n\\t   \\\"dateFiled\\\":\\\"01/24/2003\\\", \\r\\n\\t   \\\"petBirthDate\\\":\\\"03/13/1943\\\", \\r\\n\\t^ 這只是 JSON 數(shù)據(jù)的一部分...我怎樣才能使其成為有效的 JSON,以便提取我需要的密鑰?
查看完整描述

3 回答

?
富國滬深

TA貢獻(xiàn)1790條經(jīng)驗 獲得超9個贊

該網(wǎng)絡(luò)服務(wù)器已被破壞,必須受到指責(zé)。它序列化了一個 JSON 對象,然后再次序列化它,可能使用第二個 json.dumps 或者可能是字符串的 python str 或 repr - 它們足夠接近,很難分辨。當(dāng)你這樣做時,.json()你最終得到了原始的 json 序列化字符串。您json.dump剛剛再次進(jìn)行了雙重序列化。


json.loads您可以通過在轉(zhuǎn)儲之前添加一秒來解決該問題。如果服務(wù)器被修復(fù),該步驟將失敗,并且您會知道需要更新代碼......因此添加異常處理。


import requests, json


headers = {

        'Connection': 'keep-alive',

        'Accept': '*/*',

        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36',

        'X-Requested-With': 'XMLHttpRequest',

        'Sec-Fetch-Site': 'same-origin',

        'Sec-Fetch-Mode': 'cors',

        'Sec-Fetch-Dest': 'empty',

        'Referer': 'https://webapps.illinois.gov/IWCC/CaseDocket/CaseSearch/ResBirthEnquiry?Name=ILLINOIS%20STATE%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20&type=R&caseDet=19_004185',

        'Accept-Language': 'en-US,en;q=0.9',

}

params = (

    ('Name', 'ILLINOIS STATE                '),

    ('type', 'R'),

    ('_', '1601313293712'),

)

response = requests.get('https://webapps.illinois.gov/IWCC/CaseDocket/CaseSearch/GetBirthInquiryDetails',

    headers=headers, params=params)

try:

    # buggy server returns doubly encoded json - until maybe someday it doesn't

    data = response.json()

    data = json.loads(data)

except TypeError:

    print("Looks like buggy server is no longer double encoded")

with open('casedockets.json','w') as outfile:

    json.dump(data, outfile, indent=4)


查看完整回答
反對 回復(fù) 2023-09-19
?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗 獲得超9個贊

顯然服務(wù)器也責(zé)任。由于評論線程而保留此答案。

requests不會為您解析 JSON,因此通過使用json.dump您可以將編碼的 JSON 再次編碼為 JSON 字符串。

只需outfile.write(response.read())將來自服務(wù)器的實際的、未修改的響應(yīng)正文寫入文件即可。

要解析 JSON 并從中獲取 Python 對象,請使用response.json().



查看完整回答
反對 回復(fù) 2023-09-19
?
HUH函數(shù)

TA貢獻(xiàn)1836條經(jīng)驗 獲得超4個贊

這里的問題在于服務(wù)器返回請求內(nèi)容的方式。使用轉(zhuǎn)換對數(shù)據(jù)進(jìn)行初始解析.json會生成字符串編碼的 json 結(jié)構(gòu)。使用json.loads它的函數(shù)將產(chǎn)生實際的 json 數(shù)據(jù)。第一個.json調(diào)用將整個字符串解釋為 json 字符串,并根據(jù)規(guī)范返回該字符串。然后下一個調(diào)用采用現(xiàn)在對象綁定的 json 字符串并將其解釋為正確的 json 對象。

最終,您每次都需要進(jìn)行 json 解析,或者聯(lián)系服務(wù)器管理員并告訴他們他們的 Web API 有缺陷。

解決方案: json.dump(json.loads(response))


查看完整回答
反對 回復(fù) 2023-09-19
  • 3 回答
  • 0 關(guān)注
  • 264 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號