0
votes

JSON intégré casse JSON de Python analyse JSON

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 commentaires

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 ), qui désactive la plupart des interprétations des backslashes.


3 Réponses :


1
votes

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)`


0 commentaires

1
votes

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\"}"}


1 commentaires

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)



0
votes

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'}
#   }


0 commentaires