Forum Python

Please or S’enregistrer to create posts and topics.

Débutant en Python a besoin d'aide avec JSON

J'ai un appareil dont je reçois des messages JSON, et pour une raison quelconque, trouver les clés fonctionne sur un message mais pas sur un autre. Le code fonctionnait bien lorsque les clés étaient de vraies chaînes, comme les étiquettes de texte "Output Pressure", mais lorsque celles-ci ont changé pour des identifiants numériques "1126", mes problèmes ont commencé.

Le fragment de données JSON qui se parse correctement :

json_code

{'sentOn': 1724331308071, 'metrics': {'3280': 82, '3288': 64, '3266': 0, '3287': 225, '3265': 0, '3286': 225, .........}

Le fragment de code est ci-dessous :

MsgData = json.loads(message.payload)
Log.info(MsgData)
if 'metrics' in MsgData:  # s'assurer qu'il y a des données
    s = MsgData['metrics']
    for item in TagList:  # récupère les tagId's d'une liste - clés à trouver et utiliser à partir de MsgData
        key = str(item['tagId'])  # ajouté str ici parce que c'était nécessaire
        if key in s:
            # reste du code.......

 

Message JSON dans lequel "if key in s" ne trouve jamais les clés :

json_code

{'sentOn': 1724331309518, 'metrics': {'1183': 255, '1182': 255, '1181': 11, '1180': 15, '1212': 30,..........}

 

Les tagId's proviennent d'un fichier JSON que je charge depuis un fichier disque :
Cela ressemble à ce fragment :

"tagId": "3276", "label":"RPM"

 

Lors de l'impression de quelques informations de débogage :
La recherche du paquet de données pour TagId:1183 n'est jamais trouvée dans le second message.
La recherche du paquet de données pour TagId:3280 est toujours trouvée.

Je ne vois aucune différence dans les deux charges utiles. Y a-t-il quelque chose que j'aurais négligé pour expliquer pourquoi "if key in s" fonctionne sur un message et pas sur l'autre, provenant de la même source ?

Ma supposition serait que le message ne contient pas "1183". Je suggérerais d'imprimer les clés dans message.metrics pour vérifier (print ou log message["metrics"].keys()).