Я чувствую головную боль только потому, что простое и легкое заявление бросает мне в лицо некоторые ошибки.
У меня есть файл json с именем strings.json вот так:
"strings": [{"-name": "city", "#text": "City"}, {"-name": "phone", "#text": "Phone"}, ...,
{"-name": "address", "#text": "Address"}]
Я хочу прочитать файл JSON, только сейчас. У меня есть эти заявления, которые я узнал, но они не работают:
import json
from pprint import pprint
with open('strings.json') as json_data:
d = json.loads(json_data)
json_data.close()
pprint(d)
Ошибка, отображаемая на консоли, была такой:
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]
Edited
Изменено с json.loads
наjson.load
и получил это:
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"}]}
Ответы:
json.load()
Метод (без «с» в «нагрузке») может читать файл напрямую:Вы использовали
json.loads()
метод , который используется только для строковых аргументов.Редактировать: новое сообщение это совершенно другая проблема. В этом случае в этом файле есть недопустимый json. Для этого я бы порекомендовал запустить файл через валидатор json .
Существуют также решения для исправления json, как, например, Как автоматически исправить неверную строку JSON? ,
источник
Вот копия кода, которая отлично работает для меня
с данными
вы можете захотеть обернуть вашу строку json.load с помощью try catch, потому что неверный JSON вызовет сообщение об ошибке трассировки стека.
источник
Проблема заключается в использовании с заявлением:
Файл будет уже неявно закрыт. Нет необходимости
json_data.close()
снова звонить .источник
print(json.dumps(d,sort_keys=True,indent=2))
В питоне 3 мы можем использовать метод ниже.
Читать из файла и конвертировать в JSON
с оператором автоматически закрывает дескриптор открытого файла.
Строка в JSON
источник
Чтобы добавить это, сегодня вы можете использовать панды для импорта json:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_json.html. Вы можете осторожно использовать Ориент. параметр.
источник
Вы можете использовать библиотеку pandas для чтения файла JSON.
источник
Это работает для меня.
json.load () принимает объект файла, анализирует данные JSON, заполняет данные словарём Python и возвращает его вам.
Предположим, файл JSON выглядит так:
источник