web-dev-qa-db-fra.com

json.decoder.JSONDecodeError: Données supplémentaires: ligne 2 colonne 1 (caractère 190)

Je cours le code suivant

import json

addrsfile = 
open("C:\\Users\file.json", 
"r")
addrJson = json.loads(addrsfile.read())
addrsfile.close()
if addrJson:
    print("yes")

Mais en me donnant l'erreur suivante-

Traceback (most recent call last):
  File "C:/Users/Mayur/Documents/WebPython/Python_WebServices/test.py", line 9, in <module>
    addrJson = json.loads(addrsfile.read())
  File "C:\Users\Mayur\Anaconda3\lib\json\__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "C:\Users\Mayur\Anaconda3\lib\json\decoder.py", line 342, in decode
    raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 190)

Quelqu'un m'aider s'il vous plaît?

Le fichier JSON est comme-

{"name": "XYZ", "address": "54.7168,94.0215", "country_of_residence": "PQR", "countries": "LMN;PQRST", "date": "28-AUG-2008", "type": null}
{"name": "OLMS", "address": null, "country_of_residence": null, "countries": "Not identified;No", "date": "23-FEB-2017", "type": null}
4
SMS

Vous avez deux enregistrements dans votre fichier json, et json.loads() n'est pas capable de décoder plus d'un. Vous devez le faire enregistrement par enregistrement. 

Voir Python json.loads affiche ValueError: Extra data

OU vous devez reformater votre JSON pour qu'il contienne un tableau:

{
    "foo" : [
       {"name": "XYZ", "address": "54.7168,94.0215", "country_of_residence": "PQR", "countries": "LMN;PQRST", "date": "28-AUG-2008", "type": null},
       {"name": "OLMS", "address": null, "country_of_residence": null, "countries": "Not identified;No", "date": "23-FEB-2017", "type": null}
    ]
}

serait acceptable à nouveau. Mais il ne peut y avoir plusieurs objets de premier niveau. 

4
Hannu

J'étais en train d'analyser JSON à partir d'un appel d'API REST et j'ai eu cette erreur. Il s'avère que l'API est devenue "plus agitée" (par exemple, en ce qui concerne l'ordre des paramètres, etc.) et renvoyait donc des résultats mal formés. Vérifiez que vous obtenez ce que vous attendez :) 

0
Richard