Tableau de tableau d'objet : je n'arrive pas à le lire!

Bonjour à tous !!

J’ai un objet JSON comme suit :

{
“idquestion”: 547101058,
“modalities”: [

	[{
		"name": "0",
		"display": true,
	}, {
		"name": "1",
		"display": true,
	}],
	 
	 
	[{
		"name": "toto",
		"display": true,
	}, {
		"name": "titi",
		"display": true,
	}]
	
],
"modalitiesOptions": {
	"displayType": "both",
}

}

dans lequel l’objet “modalities” est en fait un tableau de tableau d’objet (dans l’exemple, j’ai deux tableaux seulement…).

Si je déclare un objet, et que je tente OB Lire($monobj;“modalities”), 4D me retourne un indéfini.

Si je déclare un tableau d’objet, et que je tente OB LIRE TABLEAU($monobj;“modalities”;$tobj), alors $tobj contient bien deux éléments, mais chaque élément est… indéfini !!

Comment puis-je faire ?

Merci d’avance à tous !!!

Peter

PS j’ai vérifié, JSON Validator accepte tout à fait cette syntaxe !!!

Bonjour,

Il y a déjà un problème avec des virgules en trop au niveau de “display”: true, et “displayType”: “both”,

Oui, c’est parce que j’ai simplifié l’objet pour qu’il n’y en ait pas sur deux pages !!

Corrigé et validé, ca donne ca :
{
“idquestion”: 547101058,
“modalities”: [

	[{
		"name": "0",
		"display": true
	}, {
		"name": "1",
		"display": true
	}],


	[{
		"name": "toto",
		"display": true
	}, {
		"name": "titi",
		"display": true
	}]

],
"modalitiesOptions": {
	"displayType": "both"
}

}

Mais le problème reste entier !!

Bonjour,
Il n’y aurait pas un “[” de trop juste après l’attribut : modalities et juste avant "modalitiesOptions ?

: Didier RENAUD

Il n’y aurait pas un “[” de trop juste après l’attribut : modalities
et juste avant "modalitiesOptions ?
Je ne crois pas, c’est OK pour les validateurs json ; ça ressemble à un tableau 2D, http://javahonk.com/create-two-dimensional-array-json-javascript/voir ici>.

Avec 4D, j’arrive à ça :
[]22851988;“Your comment here…”[/]
puis je sèche façon newbie en galère avec la dot notation :oops:

Sans le secours de la collection et de la notation à point, je n’arrive à rien, peut-être faute de persévérance.
Avec, j’arrive à ça :
<code 4D>
$path_t:=Convertir chemin POSIX vers système("/Users/arnaud/Desktop/__testPeter.json")
$json_t:=Document vers texte($path_t)
$main_o:=JSON Parse($json_t)
$modality_o:=OB Lire($main_o;“modalities”;Est une collection)
$nbreModalities_l:=$modality_o.length
//essais…
$temp_o:=$modality_o[0]
$temp_o:=$modality_o[1]
$i_l:=0
$temp_o:=$modality_o[$i_l]
//en boucle…
Boucle ($i_l;0;$modality_o.length-1)
$temp_o:=$modality_o[$i_l]
Boucle ($j_l;0;$temp_o.length-1)
$temp2_o:=$temp_o[$j_l]
$name_t:=OB Lire($temp2_o;“name”;Est un texte)
$display_b:=OB Lire($temp2_o;“display”;Est un booléen)
Fin de boucle
Fin de boucle
</code 4D>

mon premier crochet dans 4d qui n’est pas une table, je suis ému aux larmes :oops:

Bonjour,

En effet, il ne parvient pas à gérer un tableau de tableaux.
OB LIRE TABLEAU s’attend à trouver un objet dans chaque élément or ce sont des tableaux et il ne peut pas mettre un tableau en tant qu’objet.

Il y a une impossibilité technique à gérer ce cas.
Il faudra probablement en passer par la notation objet.

Ça me semble lié : je reste sans réponse sur mes histoires http://forums.4d.com/Post//22589839/1/#22852047de tableau et de collection>.

Je confirme. En utilisant la notation objet, ça gère.
$objet2:=$objet.modalities[1][0] renvoie bien {“name”: “toto”, “display”: true} comme attendu.

Bonjour Arnaud,

Merci de t’être penché sur le sujet.

Juste un souci, je ne suis pas en version R… Donc la notion de “est une collection” n’existe pas encore !!!

J’ai donc revu la génération du Json à l’origine, pour pouvoir lire quelquechose…

A+

Bonjour Stanislas,

Oui, on peut y arriver comme ca… mais ca limite à la nécessité de connaitre a priori le nombre de tableaux dans le tableau… Bref, il manque quelque chose !

Mais merci, j’ai pris le problème à l’envers et j’ai fait modifier le Json d’origine.

Bonne journée

Bonjour Peter,

Pas de problème pour avoir le nombre d’éléments d’un tableau en notation objet.
La propriété length donne cette information.
$objet.modalities.length ou $objet.modalities[0].length renvoient bien les bonnes longueurs.