Aller au contenu
jojo

générer une table JSON

Recommended Posts

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci, mais je n'y comprends rien, car pourtant :

20220807035144
// http://192.168.1.xxx/api/users

[
  {
    "id": 2,
    ...  },
  {
    "id": 175,
 ...  }
]

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Pas sûr d'arriver à expliquer :unsure:

 

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é par jjacques68
  • Thanks 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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)

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par jjacques68

Partager ce message


Lien à poster
Partager sur d’autres sites

cool, j'avais validé ma solution avec l'option 1, et je suis content parce que ça devient bien

  • Thanks 1

Partager ce message


Lien à poster
Partager sur d’autres sites

×