Saya mendapatkan sedikit sakit kepala hanya karena pernyataan yang terlihat sederhana dan mudah adalah melemparkan beberapa kesalahan di wajah saya.
Saya memiliki file json bernama strings.json seperti ini:
"strings": [{"-name": "city", "#text": "City"}, {"-name": "phone", "#text": "Phone"}, ...,
{"-name": "address", "#text": "Address"}]
Saya ingin membaca file json, hanya untuk saat ini. Saya memiliki pernyataan ini yang saya temukan, tetapi tidak berfungsi:
import json
from pprint import pprint
with open('strings.json') as json_data:
d = json.loads(json_data)
json_data.close()
pprint(d)
Kesalahan yang ditampilkan pada konsol adalah ini:
Traceback (most recent call last):
File "/home/.../android/values/manipulate_json.py", line 5, in <module>
d = json.loads(json_data)
File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer
[Finished in 0.1s with exit code 1]
Diedit
Diubah dari json.loads
menjadijson.load
dan dapatkan ini:
Traceback (most recent call last):
File "/home/.../android/values/manipulate_json.py", line 5, in <module>
d = json.load(json_data)
File "/usr/lib/python2.7/json/__init__.py", line 278, in load
**kw)
File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 369, in decode
raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 829 column 1 - line 829 column 2 (char 18476 - 18477)
[Finished in 0.1s with exit code 1]
{"strings": [{"-name": "city", "#text": "City"}, {"-name": "phone", "#text": "Phone"}, ..., {"-name": "address", "#text": "Address"}]}
Jawaban:
The
json.load()
Metode (tanpa "s" di "load") dapat membaca file langsung:Anda menggunakan
json.loads()
metode ini , yang hanya digunakan untuk argumen string .Sunting: Pesan baru adalah masalah yang sama sekali berbeda. Dalam hal ini, ada beberapa json yang tidak valid dalam file itu. Untuk itu, saya akan merekomendasikan menjalankan file melalui validator json .
Ada juga solusi untuk memperbaiki json seperti misalnya Bagaimana cara saya secara otomatis memperbaiki string JSON yang tidak valid? .
sumber
Ini adalah salinan kode yang berfungsi dengan baik untuk saya
dengan data
Anda mungkin ingin membungkus json.load line Anda dengan try catch karena JSON yang tidak valid akan menyebabkan pesan kesalahan stacktrace.
sumber
Masalahnya menggunakan dengan pernyataan:
File sudah akan ditutup secara implisit. Tidak perlu menelepon
json_data.close()
lagi.sumber
print(json.dumps(d,sort_keys=True,indent=2))
Dalam python 3, kita bisa menggunakan metode di bawah ini.
Baca dari file dan konversikan ke JSON
dengan pernyataan secara otomatis menutup deskriptor file yang dibuka.
String ke JSON
sumber
Untuk menambahkan ini, hari ini Anda dapat menggunakan panda untuk mengimpor json:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_json.html Anda mungkin ingin menggunakan orientasi dengan hati-hati. parameter.
sumber
Anda dapat menggunakan panda library untuk membaca file JSON.
sumber
Ini bekerja untuk saya.
json.load () menerima objek file, mem-parsing data JSON, mengisi kamus Python dengan data dan mengembalikannya kepada Anda.
Misalkan file JSON seperti ini:
sumber