J'ai rencontré un autre problème qui renvoie la même erreur.
Problème de devis unique
J'ai utilisé une chaîne json avec des guillemets simples :
{
'property': 1
}
Mais json.loads
n'accepte que les guillemets doubles pour les propriétés json :
{
"property": 1
}
Dernier problème de virgule
json.loads
n'accepte pas une virgule finale:
{
"property": "text",
"property2": "text2",
}
Solution: ast
pour résoudre les problèmes de guillemets simples et de virgules finales
Vous pouvez utiliser ast
(une partie de la bibliothèque standard pour Python 2 et 3) pour ce traitement. Voici un exemple :
import ast
# ast.literal_eval() return a dict object, we must use json.dumps to get JSON string
import json
# Single quote to double with ast.literal_eval()
json_data = "{'property': 'text'}"
json_data = ast.literal_eval(json_data)
print(json.dumps(json_data))
# Displays : {"property": "text"}
# ast.literal_eval() with double quotes
json_data = '{"property": "text"}'
json_data = ast.literal_eval(json_data)
print(json.dumps(json_data))
# Displays : {"property": "text"}
# ast.literal_eval() with final coma
json_data = "{'property': 'text', 'property2': 'text2',}"
json_data = ast.literal_eval(json_data)
print(json.dumps(json_data))
# Displays : {"property2": "text2", "property": "text"}
L'utilisation ast
vous évitera les problèmes de guillemets simples et de virgules finales en interprétant le dictionnaire JSON comme Python (vous devez donc suivre la syntaxe du dictionnaire Python). C'est une alternative de eval()
fonction assez bonne et sûre pour les structures littérales.
La documentation Python nous a avertis de l'utilisation d'une chaîne volumineuse / complexe:
Avertissement Il est possible de planter l'interpréteur Python avec une chaîne suffisamment grande / complexe en raison des limitations de profondeur de pile dans le compilateur AST de Python.
json.dumps avec des guillemets simples
Pour utiliser json.dumps
facilement les guillemets simples, vous pouvez utiliser ce code:
import ast
import json
data = json.dumps(ast.literal_eval(json_data_single_quote))
ast
Documentation
ast Python 3 doc
ast Python 2 doc
Outil
Si vous modifiez fréquemment JSON, vous pouvez utiliser CodeBeautify . Il vous aide à corriger les erreurs de syntaxe et à minimiser / embellir JSON.
J'espère que cela aide.
"
erreur est-ce une erreur de copier-coller?