Estou com um pouco de dor de cabeça só porque uma declaração simples e fácil está lançando alguns erros na minha cara.
Eu tenho um arquivo json chamado strings.json assim:
"strings": [{"-name": "city", "#text": "City"}, {"-name": "phone", "#text": "Phone"}, ...,
{"-name": "address", "#text": "Address"}]
Eu quero ler o arquivo json, apenas isso por enquanto. Eu tenho estas declarações que eu descobri, mas não está funcionando:
import json
from pprint import pprint
with open('strings.json') as json_data:
d = json.loads(json_data)
json_data.close()
pprint(d)
O erro exibido no console foi o seguinte:
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]
Editado
Alterado de json.loads
parajson.load
e entendi:
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"}]}
Respostas:
O
json.load()
método (sem "s" em "carga") pode ler um arquivo diretamente:Você estava usando o
json.loads()
método , usado apenas para argumentos de cadeia .Edit: A nova mensagem é um problema totalmente diferente. Nesse caso, há algum json inválido nesse arquivo. Para isso, eu recomendaria executar o arquivo através de um validador json .
Também existem soluções para corrigir json, como por exemplo Como corrigir automaticamente uma sequência JSON inválida? .
fonte
Aqui está uma cópia do código que funciona bem para mim
com os dados
convém agrupar sua linha json.load com uma captura de tentativa, porque JSON inválido causará uma mensagem de erro de rastreamento de pilha.
fonte
O problema está usando com a instrução:
O arquivo já estará implicitamente fechado. Não há necessidade de ligar
json_data.close()
novamente.fonte
print(json.dumps(d,sort_keys=True,indent=2))
No python 3, podemos usar o método abaixo.
Leia do arquivo e converta para JSON
com a instrução fecha automaticamente o descritor de arquivo aberto.
String para JSON
fonte
Para adicionar isso, hoje você pode usar o pandas para importar o json:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_json.html Você pode fazer um uso cuidadoso do oriente parâmetro.
fonte
Você pode usar a biblioteca do pandas para ler o arquivo JSON.
fonte
Isso funciona para mim.
json.load () aceita o objeto file, analisa os dados JSON, preenche um dicionário Python com os dados e os retorna de volta para você.
Suponha que o arquivo JSON seja assim:
fonte