J'essaie d'analyser JSON qui comprend un modèle JSON intégré en tant que propriété à cordes. Cela pause avec
JSON.Decoder.jsondecodeError: Attendez-vous ',' Délimiteur: Ligne 2 Colonne 16 (Char 17) Code> def testJson(self):
testJson = """{
"myModel": "{\"startDate\":\"2020-02-01T22:40:38.010Z\"}"
}"""
myJsonDict=json.loads(testJson)
3 Réponses :
Vous devez mettre à jour votre valeur TestJson comme suit
`def testJson(self):
testJson = """{
"myModel": {\"startDate\":\"2020-02-01T22:40:38.010Z\"}
}"""
myJsonDict=json.loads(testJson)`
Ce JSON n'est pas valide. C'est prétendre Json. Il n'est valide qu'au 1er niveau.
Fondamentalement, c'est le JSON que vous avez montré. P>
{"myModel": "{\"startDate\":\"2020-02-01T22:40:38.010Z\"}"}
C'est ce qui est attendu - la propriété MyModel devrait simplement être un tas de caractères (qui deviennent serviles plus tard en tant que JSON)
Vous pouvez utiliser la méthode de la chaîne code> remplacer code> afin de rendre votre chaîne JSON valide:
def testJson(self):
testJson = """{
"myModel": "{\"startDate\":\"2020-02-01T22:40:38.010Z\"}"
}"""
myJsonDict=json.loads(testJson.replace("\n","").replace('\"', '"').replace('"{',"{").replace('}"',"}"))
print(myJsonDict)
# Output:
# {'myModel':
# {'startDate': '2020-02-01T22:40:38.010Z'}
# }
Où vient votre Json dans le code d'origine qui a motivé cette question? Le traitement littéral de Python String consomme les barres anti-backs. Cela ne se produit que avec des littéraux à cordes, pas avec la plupart des sources, un programme «réel» obtiendrait JSON.
La chaîne provient normalement d'une demande d'API, qui est elle-même codée en utilisant Jackson. Je voulais créer un test de l'unité (sans demander à l'API). Merci va réparer les backslashes
Sinon, vous pouvez utiliser des "chaînes brutes" (préfixe le littéral de chaîne avec
r code>), qui désactive la plupart des interprétations des backslashes.