我已經看到了類似的問題,但不確定在我的情況下我需要更改哪些內容才能使其成為有效的 json。我有一個這樣的字典串列:
dicts = [{'date': '2018-12-11',
'target_currency': 'DKK',
'exchange_rate': 7.4641,
'base_currency': 'EUR'},
{'date': '2018-12-11',
'target_currency': 'GBP',
'exchange_rate': 0.90228,
'base_currency': 'EUR'},
...]
我已經像這樣轉換為.json:
with open('cleaned.json', 'w') as f:
for d in dict2:
json.dump(d, f)
f.write(',')
在https://jsonlint.com/上得到這個錯誤。
{
"date": "2018-12-11",
"target_currency": "USD",
"exchange_rate": 1.1379,
"base_currency": "EUR"
}, {
"date": "2018-12-11",
"target_currency": "JPY",
"exchange_rate": 128.75,
"base_currency": "EUR"
}, {
"date": "2018-12-11",
"target_currency": "BGN",
"exchange_rate": 1.9558,
"base_currency": "EUR"
Error: Parse error on line 6:
...e_currency": "EUR"}, { "date": "2018-1
----------------------^
Expecting 'EOF', got ','
當我嘗試將逗號更改為新的行分隔符 f.write('\n') 時,出現此錯誤:
Error: Parse error on line 6:
..._currency": "EUR"} { "date": "2018-12-
----------------------^
Expecting 'EOF', '}', ',', ']', got '{'
顯然我正在錯誤地寫入檔案。我究竟做錯了什么?
我還嘗試使用 open('cleaned.jsonl', 'w') 和 f.write('\n') 將其寫入 .jsonl(json 行)格式。但我還有
JSONDecodeError: Extra data: line 2 column 1 (char 98)
當我使用 json.load() 再次加載它時。
uj5u.com熱心網友回復:
import json
data = [{'date': '2018-12-11',
'target_currency': 'DKK',
'exchange_rate': 7.4641,
'base_currency': 'EUR'},
{'date': '2018-12-11',
'target_currency': 'GBP',
'exchange_rate': 0.90228,
'base_currency': 'EUR'}]
with open('data.json', 'w') as f:
json.dump(data, f, indent=4)
with open('data.jsonl', 'w') as f:
for item in data:
f.write(json.dumps(item) '\n')
輸出data.json:
[
{
"date": "2018-12-11",
"target_currency": "DKK",
"exchange_rate": 7.4641,
"base_currency": "EUR"
},
{
"date": "2018-12-11",
"target_currency": "GBP",
"exchange_rate": 0.90228,
"base_currency": "EUR"
}
]
你可以用它作為一個整體來閱讀json.load()。
輸出data.jsonl:
{"date": "2018-12-11", "target_currency": "DKK", "exchange_rate": 7.4641, "base_currency": "EUR"}
{"date": "2018-12-11", "target_currency": "GBP", "exchange_rate": 0.90228, "base_currency": "EUR"}
請注意,您不能將json模塊作為一個檔案讀取 ndjson/jsonl,您需要逐行讀取/決議。有第三方庫可以方便地處理 ndjson/jsonl。此外,您無法在https://jsonlint.com上驗證 ndjson/jsonl
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/450867.html
