Je reçois un peu de maux de tête juste parce qu'une déclaration simple et facile me jette quelques erreurs au visage.
J'ai un fichier json appelé strings.json comme ceci:
"strings": [{"-name": "city", "#text": "City"}, {"-name": "phone", "#text": "Phone"}, ...,
{"-name": "address", "#text": "Address"}]
Je veux lire le fichier json, juste pour l'instant. J'ai ces déclarations que j'ai découvert, mais cela ne fonctionne pas:
import json
from pprint import pprint
with open('strings.json') as json_data:
d = json.loads(json_data)
json_data.close()
pprint(d)
L'erreur affichée sur la console était la suivante:
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]
Édité
Modifié de json.loads
àjson.load
et j'ai obtenu ceci:
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"}]}
Réponses:
La
json.load()
méthode (sans "s" dans "load") permet de lire directement un fichier:Vous utilisiez la
json.loads()
méthode , qui est utilisée uniquement pour les arguments de chaîne .Edit: Le nouveau message est un problème totalement différent. Dans ce cas, il y a du json invalide dans ce fichier. Pour cela, je recommanderais d'exécuter le fichier via un validateur json .
Il existe également des solutions pour corriger json comme par exemple Comment réparer automatiquement une chaîne JSON invalide? .
la source
Voici une copie du code qui fonctionne bien pour moi
avec les données
vous souhaiterez peut-être encapsuler votre ligne json.load avec un try catch car un JSON non valide provoquera un message d'erreur stacktrace.
la source
Le problème utilise avec l' instruction:
Le dossier va déjà être implicitement fermé. Il n'est pas nécessaire de rappeler
json_data.close()
.la source
print(json.dumps(d,sort_keys=True,indent=2))
En python 3, nous pouvons utiliser la méthode ci-dessous.
Lire à partir d'un fichier et convertir en JSON
avec l' instruction ferme automatiquement le descripteur de fichier ouvert.
Chaîne en JSON
la source
Pour ajouter à cela, vous pouvez aujourd'hui utiliser des pandas pour importer json:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_json.html Vous voudrez peut-être faire une utilisation prudente de l'orient paramètre.
la source
Vous pouvez utiliser la bibliothèque pandas pour lire le fichier JSON.
la source
Cela fonctionne pour moi.
json.load () accepte l'objet fichier, analyse les données JSON, remplit un dictionnaire Python avec les données et vous le renvoie.
Supposons que le fichier JSON ressemble à ceci:
la source