Boli mnie głowa tylko dlatego, że proste, proste stwierdzenie rzuca kilka błędów na moją twarz.
Mam plik json o nazwie strings.json, taki jak ten:
"strings": [{"-name": "city", "#text": "City"}, {"-name": "phone", "#text": "Phone"}, ...,
{"-name": "address", "#text": "Address"}]
Chcę przeczytać plik json, tylko na razie. Mam te stwierdzenia, które znalazłem, ale to nie działa:
import json
from pprint import pprint
with open('strings.json') as json_data:
d = json.loads(json_data)
json_data.close()
pprint(d)
Błąd wyświetlany na konsoli był następujący:
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]
Edytowane
Zmieniono z json.loads
najson.load
i dostałem to:
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"}]}
Odpowiedzi:
json.load()
Metoda (bez „s” w „obciążenie”) można odczytać plik bezpośrednio:Użyłeś
json.loads()
metody , która jest używana tylko dla argumentów łańcuchowych .Edycja: Nowa wiadomość to zupełnie inny problem. W takim przypadku w pliku znajduje się nieprawidłowy plik Json. W tym celu zaleciłbym uruchomienie pliku za pomocą walidatora json .
Istnieją również rozwiązania do naprawy JSON, takie jak na przykład Jak automatycznie naprawić nieprawidłowy ciąg JSON? .
źródło
Oto kopia kodu, która działa dobrze dla mnie
z danymi
możesz owinąć linię json.load próbnym chwytaniem, ponieważ niepoprawny JSON spowoduje komunikat o błędzie śledzenia stosu.
źródło
Problem korzysta ze stwierdzeniem:
Plik zostanie już domyślnie zamknięty. Nie ma potrzeby dzwonić
json_data.close()
ponownie.źródło
print(json.dumps(d,sort_keys=True,indent=2))
W Pythonie 3 możemy użyć poniższej metody.
Odczyt z pliku i konwersja do JSON
z instrukcją automatycznie zamyka otwarty deskryptor pliku.
Ciąg do JSON
źródło
Aby dodać to, dzisiaj możesz użyć pand do importowania json:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_json.html Możesz zechcieć ostrożnie użyć orient parametr.
źródło
Możesz użyć biblioteki pand do odczytania pliku JSON.
źródło
To działa dla mnie.
json.load () akceptuje obiekt pliku, analizuje dane JSON, zapełnia dane słownikiem Pythona i zwraca go z powrotem.
Załóżmy, że plik JSON wygląda następująco:
źródło