Python >> Tutoriel Python >  >> Python Tag >> JSON

Comment résoudre Python JSONDecodeError :Délimiteur "," attendu :ligne 1

L'erreur se produit lorsque vous essayez d'analyser une chaîne JSON invalide en json.loads() appel de méthode. Vous pouvez résoudre cette erreur en vous assurant d'échapper aux guillemets doubles avec des doubles barres obliques inverses. Par exemple,

import json

data = json.loads(
   '{ "particle":{ "name":"electron \\"lepton\\"" } }'
)
print(data)

Vous pouvez également utiliser r pour indiquer que la chaîne est une chaîne brute. Sinon, vous devez corriger toute autre erreur dans la chaîne JSON,

JSONDecodeError :Délimiteur "," attendu :ligne 1

En Python, JSONDecodeError se produit lorsqu'il y a un problème avec le formatage des données JSON. Cette erreur spécifique nous indique que le décodeur JSON a rencontré une chaîne JSON non valide.

Exemple 1 :ne pas échapper aux guillemets doubles

Examinons un exemple de chaîne JSON invalide.

import json

data = json.loads(
   '{ "particle":{ "name":"electron "lepton"" } }'
)

print(data)

Dans l'exemple ci-dessus, la valeur du name key contient des guillemets doubles. Exécutons le code pour voir ce qui se passe :

JSONDecodeError: Expecting ',' delimiter: line 1 column 34 (char 33)

L'erreur se produit car nous n'avons pas échappé aux guillemets doubles "" dans la chaîne.

Échapper une chaîne signifie réduire l'ambiguïté des guillemets et des autres caractères de la chaîne.

Nous devons échapper les guillemets car l'interpréteur Python ne sait pas où se termine la chaîne.

Solution n° 1 :utiliser une double barre oblique inverse pour échapper les guillemets doubles

Nous pouvons résoudre l'erreur en échappant les guillemets doubles dans la chaîne à l'aide de deux barres obliques inverses \\ . Avec ce changement, l'interpréteur Python sait que les guillemets doubles font partie des valeurs de la chaîne.

Regardons le code révisé :

import json

data = json.loads(
   '{ "particle":{ "name":"electron \\"lepton\\"" } }'
)
print(data)
print(type(data))

Exécutons le code pour obtenir le résultat :

{'particle': {'name': 'electron "lepton"'}}
<class 'dict'>

Nous avons réussi à analyser la chaîne JSON et à la convertir en dictionnaire Python.

Solution n°2 :Utiliser r pour indiquer une chaîne brute

On peut aussi mettre un r avant la chaîne JSON et ajoutez un échappement aux guillemets doubles autour de lepton avec des barres obliques inverses simples. Regardons le code révisé :

import json

data = json.loads(
   r'{ "particle":{ "name":"electron \"lepton\"" } }'
)
print(data)
print(type(data))

Exécutons le code pour obtenir le résultat :

{'particle': {'name': 'electron "lepton"'}}
<class 'dict'>

Nous avons réussi à analyser la chaîne JSON et à la convertir en dictionnaire Python.

Exemple 2 :déclaration incorrecte d'un tableau

Examinons un autre exemple de chaîne JSON invalide.

import json

data = json.loads(
'["name":"electron", "charge": -1, "mass":0.511]'
)
print(data)

Dans l'exemple ci-dessus, nous avons une chaîne qui contient un tableau. Exécutons le code pour voir ce qui se passe :

JSONDecodeError: Expecting ',' delimiter: line 1 column 8 (char 7)

L'erreur se produit parce que la chaîne JSON contient :caractères dans le tableau, ce qui n'est pas une syntaxe valide pour le décodeur JSON.

Solution n° 1 : utiliser des virgules au lieu des deux-points

Si nous voulons créer un tableau JSON valide, nous devons séparer les éléments par des virgules et non par des deux-points. Regardons le code révisé :

import json

data = json.loads(
'["name","electron", "charge", -1, "mass",0.511]'
)
print(data)
print(type(data))

Exécutons le code pour obtenir le résultat :

['name', 'electron', 'charge', -1, 'mass', 0.511]
<class 'list'>

Nous avons analysé avec succès une chaîne JSON valide contenant un tableau et renvoyé une liste Python.

Solution n° 2 :enrouler des accolades pour les paires clé-valeur

Si nous voulons créer un ensemble de paires clé-valeur, nous devons garder les deux-points séparant les clés et les valeurs enveloppent l'ensemble entre accolades. Regardons le code révisé :

import json

data = json.loads(
'{"name":"electron", "charge": -1, "mass":0.511}'
)
print(data)
print(type(data))

Exécutons le code pour obtenir le résultat :

{'name': 'electron', 'charge': -1, 'mass': 0.511}
<class 'dict'>

Nous avons analysé avec succès une chaîne JSON valide contenant un ensemble de paires clé-valeur et renvoyé un dictionnaire Python.