亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Python:解析連接的 JSON

Python:解析連接的 JSON

慕工程0101907 2022-11-01 15:58:07
我有一個巨大的文件(幾 GB 大?。K幸粋€連接的 json,即幾個 JSON 背靠背沒有分隔符(甚至沒有逗號或換行符)。有誰知道我可以以某種方式解析這個?當連接中的第二個 json 到達時,json.load(fileobj) 和 json.loads(line) 都失敗并出現“額外數據”錯誤。如果解決方案由于尺寸巨大而允許字符流傳輸,那就更好了,但這不是必需的。編輯:連接的 json 是https://en.wikipedia.org/wiki/JSON_streaming#Concatenated_JSON_2
查看完整描述

2 回答

?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

逐字符讀取文件,將結果寫入文件。還要跟蹤大括號縮進級別。

每當您讀取一個}使縮進級別為零的字符時,您就讀取了整個 json 對象。關閉文件,用 加載它json.load(),然后開始一個新文件。

但是,如果文件包含引號或轉義}字符,則此解決方案過于幼稚且行不通;你需要一個“真正的”解析器。


查看完整回答
反對 回復 2022-11-01
?
LEATH

TA貢獻1936條經驗 獲得超7個贊

另一個答案建議跟蹤縮進。這很難(盡管不如 XML 差)。

一個更簡單的解決方案是意識到當它因“額外數據”而失敗時,JSONDecodeError異常包含一個pos字段,該字段說明額外數據的開始位置。額外的數據是您的第二條信息。因此,您想重新解析之前的子字符串pos。

遞歸解決方案來展示這個想法:

def parseConcatenatedJSON(s:str):  
  try:
        json.loads(s)
    except json.JSONDecodeError as jde:
        head = s[0:jde.pos]
        json.loads(head)
        tail = s[jde.pos:]
        parseConcatenatedJSON(tail)


查看完整回答
反對 回復 2022-11-01
  • 2 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號