TABLEAU OBJETS vers JSON

Bonjour,

je ne comprends pas le probleme avec mon code ci-dessous

j’obtiens
[
{
“toto”: 3,
“titi”: 3
},
{
“toto”: 3,
“titi”: 3
},
{
“toto”: 3,
“titi”: 3
}
]

alors que je veux
[
{
“toto”: 1,
“titi”: 2
},
{
“toto”: 3,
“titi”: 4
},
{
“toto”: 5,
“titi”: 6
}
]

<code 4D>

C_OBJET($obj)
TABLEAU OBJET($tabObj;0)

$cpt:=0

Boucle ($i;1;3)
	
	$cpt:=$cpt+1
	
	OB FIXER($obj;"toto";$cpt)
	OB FIXER($obj;"titi";$cpt)
	
	AJOUTER A TABLEAU($tabObj;$obj)
	
Fin de boucle 


$json:=JSON Stringify tableau($tabObj)



ALERTE($json)

</code 4D>

le tableau contient 3 fois le meme objet (le dernier)
probleme avec AJOUTER A TABLEAU($tabObj;$obj) ??

c’est problablement parce que $obj est une reference et pas une valeur

j’obtiens le resultat attendu avec le code ci-dessous

<code 4D>
C_OBJET($obj)
TABLEAU OBJET($tabObj;0)

$cpt:=0

Boucle ($i;1;3)
	
	$cpt:=$cpt+1
	
	AJOUTER A TABLEAU($tabObj;$obj)
	
	$nb:=Taille tableau($tabObj)
	
	OB FIXER($tabObj{$nb};"toto";$cpt)
	
	$cpt:=$cpt+1
	
	OB FIXER($tabObj{$nb};"titi";$cpt)
	
Fin de boucle 


$json:=JSON Stringify tableau($tabObj)



ALERTE($json)

</code 4D>

Bonjour,

Le soucis est que la variable $obj n’est pas un objet mais une reference a un objet. De meme le tableau d’objet est en fait un tableau de reference vers des objets en memoire.
Donc le resultat est parfaitement logique.
Voici comment faire :

<code 4D>

C_OBJET($obj)
TABLEAU OBJET($tabObj;0)

$cpt:=0

Boucle ($i;1;3)
	
	$cpt:=$cpt+1
	
	OB FIXER($obj;"toto";$cpt)
	OB FIXER($obj;"titi";$cpt)
	
	AJOUTER A TABLEAU($tabObj;OB copier($obj))
	
Fin de boucle 


$json:=JSON Stringify tableau($tabObj)



ALERTE($json)

</code 4D>

Ceci est d’ailleurs explique dans la documentation dans l’exemple 1 de cette page qui est clairement similaire a votre code :
http://doc.4d.com/4Dv16R6/4D/16-R6/OB-Copier.301-3548256.fr.html

Cordialement,

merci Oliver

j’avais trouve une solution entre temps

je debute avec les objets dans 4D, je n’ai pas pense a la commande OB Copier, desormais je l’utiliserai

bonne journee

Bonjour,

Il n’y a meme pas besoin de passer par un objet intermediaire.
On dimensionne le tableau puis on fixe directement les attributs de chaque element :
<code 4D>
TABLEAU OBJET($tabObj;3)

$cpt:=0

Boucle($i;1;3)

$cpt:=$cpt+1

OB FIXER($tabObj{$i};“toto”;$cpt;“titi”;$cpt)

Fin de boucle

$json:=JSON Stringify tableau($tabObj)

ALERTE($json)
</code 4D>