jojo Posté(e) le 6 août 2022 Signaler Posté(e) le 6 août 2022 Bonjour, Je dois bloquer sur une bêtise ... Je veux créer une table JSON à plusieurs entrées, car mon instruction resp = json.decode(response.data) ne me retourne qu'une seule entrée (en fait c'est pour faire un tuto/QA bien comme il faut pour gérer les serrures Nuki => teasing ...) resp = [{"deviceType": 0, "nukiId": 1, "name": "Entrée1"}, {"deviceType": 0, "nukiId": 184981569, "name": "Entrée"}, {"deviceType": 0, "nukiId": 3, "name": "Entrée3"}] et voici le debug = [06.08.2022] [16:40:01] [ERROR] [QUICKAPP258]: QuickApp crashed [06.08.2022] [16:40:01] [ERROR] [QUICKAPP258]: main.lua:43: unexpected symbol near '[' La ligne 43 correspond à la première ligne de code. Pourtant il me semble avoir fait exactement comme Google ma l'a recommandé. Merci pour vos yeux
jjacques68 Posté(e) le 6 août 2022 Signaler Posté(e) le 6 août 2022 ah et aussi la syntaxe : resp = { {deviceType=0, nukiId=1, name="Entrée1"}, {deviceType=0, nukiId=184981569, name="Entrée"}, {deviceType=0, nukiId=3, name="Entrée3"}, } 1
jojo Posté(e) le 7 août 2022 Auteur Signaler Posté(e) le 7 août 2022 Merci, mais je n'y comprends rien, car pourtant : 20220807035144 // http://192.168.1.xxx/api/users [ { "id": 2, ... }, { "id": 175, ... } ]
jjacques68 Posté(e) le 7 août 2022 Signaler Posté(e) le 7 août 2022 (modifié) Pas sûr d'arriver à expliquer ce que tu affiches provient d'un json.encode(), donc c'est une chaine de caractères. Et donc ne peut pas être utilisée en tant que table. si tu veux utiliser le même style de syntaxe, il faut alors écrire ta table sous forme de chaine et ensuite faire un json.decode(). mais c'est pas agréable à utiliser... (avis perso) Ce que j'ai posté est la même chose sous forme de table et non de chaine. copie/colle c'est exemple et regarde le debug, tu as les 2 manières d'écrire : --à partir d'une table resp = {{deviceType=0, nukiId=1, name="Entrée1"}, {deviceType=0, nukiId=184981569, name="Entrée"}, {deviceType=0, nukiId=3, name="Entrée3"}} print("point de départ en table :", resp) print("on l'utilise comme une table : ", resp[1].name) resp = json.encode(resp) --on transforme en string print("transformé en chaine : ", resp) print('****************************************************') --à partir d'une string resp = '[{"deviceType": 0, "nukiId": 1, "name": "Entrée1"}, {"deviceType": 0, "nukiId": 184981569, "name": "Entrée"}, {"deviceType": 0, "nukiId": 3, "name": "Entrée3"}]' print("point de départ en chaine : ", resp) resp = json.decode(resp) --on transforme en table print("transformé en table : ", resp) print("on l'utilise comme une table : ", resp[1].name) Modifié le 7 août 2022 par jjacques68 1
jojo Posté(e) le 7 août 2022 Auteur Signaler Posté(e) le 7 août 2022 Merci pour ton temps/implication .... En fait pourquoi cette question ? Car je veux faire un QA (à partager avec la communauté) qui soit le plus générique (= qui convient aux plus de cas) possibles. Pour moi perso, le JSON/Table ne contiendra jamais qu'une seule entrée. C'est donc pour pouvoir être général que j'essaie de générer un table JSON à plusieurs entrées , pour simuler une situation où on aurait plusieurs entrées dans la table retournée et ensuite ne traiter que l'entrée qui nous intéresse. Voici que que mon JSON me retourne actuellement (1 seule entrée) : [07.08.2022] [13:27:12] [TRACE] [QUICKAPP258]: OK, réponse : [{"deviceType": 0, "nukiId": 184981569, "name": "Entrée", "firmwareVersion": "1.14.1", "lastKnownState": {"mode": 2, "state": 3, "stateName": "unlocked", "batteryCritical": false, "batteryCharging": false, "batteryChargeState": 26, "keypadBatteryCritical": false, "timestamp": "2022-08-07T06:14:14+00:00"}}] Voici le débug demandé : 1 [07.08.2022] [13:11:53] [DEBUG] [QUICKAPP173]: onInit [07.08.2022] [13:11:53] [DEBUG] [QUICKAPP173]: point de départ en table : table: 0x16781df0 [07.08.2022] [13:11:53] [DEBUG] [QUICKAPP173]: on l'utilise comme une table : Entrée1 [07.08.2022] [13:11:53] [DEBUG] [QUICKAPP173]: transformé en chaine : [{"name":"Entrée1","nukiId":1,"deviceType":0},{"name":"Entrée","nukiId":184981569,"deviceType":0},{"name":"Entrée3","nukiId":3,"deviceType":0}] [07.08.2022] [13:11:53] [DEBUG] [QUICKAPP173]: **************************************************** [07.08.2022] [13:11:53] [DEBUG] [QUICKAPP173]: point de départ en chaine : [{"deviceType": 0, "nukiId": 1, "name": "Entrée1"}, {"deviceType": 0, "nukiId": 184981569, "name": "Entrée"}, {"deviceType": 0, "nukiId": 3, "name": "Entrée3"}] [07.08.2022] [13:11:53] [DEBUG] [QUICKAPP173]: transformé en table : table: 0x167d4dd0 [07.08.2022] [13:11:53] [DEBUG] [QUICKAPP173]: on l'utilise comme une table : Entrée1 La question est donc : Lequel de tes 2 scenarios dois-je utiliser pour simuler au mieux le cas d'un retour de JSON sous forme de table à plusieurs entrées (vu que moi je n'ai jamais qu'une seule entrée) Merci (surtout pour les autres)
jjacques68 Posté(e) le 7 août 2022 Signaler Posté(e) le 7 août 2022 (modifié) je ne sais pas ce qui te retourne cette réponse. Mais je pense que pour l'exploiter il faut l'avoir en format table et non chaîne. Du coup, pour faire des simulations je travaillerai avec une table (donc solution 1). Au final tout est de type table. Modifié le 7 août 2022 par jjacques68
jojo Posté(e) le 7 août 2022 Auteur Signaler Posté(e) le 7 août 2022 cool, j'avais validé ma solution avec l'option 1, et je suis content parce que ça devient bien 1
Messages recommandés