Débutant en Python a besoin d'aide avec JSON
Citation de mouba le 22 août 2024, 18 h 56 minJ'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 ?
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 ?
Citation de dominator le 22 août 2024, 20 h 00 minMa 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()).
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()).