Chercher dans un objet

j’ai un objet $answer:=JSON Parse($reponse;38)

le length est de 1984

exemple d’un content de l’objet

{employee_number:2211027,nickname:hannah,active_clairvoyant:0,company_location_id:12,company_location:Ulysse}

je souhaite chercher dans cet objet nickname = simone

comment faire ?

Product :4D - 4D Server
v17

Merci

Salut

le doc te dirai: QUERY BY ATTRIBUTE :wink:

Patrick

je crois que query by attribute est pour chercher dans une table et dans un champ objet, or c’est pas mon cas

Bonjour,

Les nombreuses démos de OD lors des worldTour ou des summit proposent une petite librairie avec 2 ou 3 fonctions sur cet aspect.

Tu les as quelque part ?
Tu les as zappées ?

Dis-nous.

non j’ai pas mais j’aimerais les avoir stp

merci

: Eric JUHEL

Les nombreuses démos de OD lors des worldTour ou des summit proposent
une petite librairie avec 2 ou 3 fonctions sur cet aspect.
S’il s’agit de son composant notation objet (merci Olivier, il sert…), il y a 3 fonctions qui cherchent dans une des propriétés d’un tableau objet. Mais dans le cas présent d’un objet “pas tableau” :
<code 4D>
si( OB est defini($answer;“nickname”)
$nickname:=OB lire($answer;“nickname”;est un texte)
fin de si
</code 4D>
ça suffit pas ?

Et avec la notation à point, vous pouvez écrire :

<code 4D>
If ($answer.nickname#Null)
If ($answer.nickname=“simone”)

End if 

End if

</code 4D>

<code 4D>
If($answer.nickname#Null)
If($answer.nickname=“simone”)
en voiture
End if
End if
</code 4D>

Et pour rouler plus vite (accroche toi…) :

<code 4D>
//If($answer.nickname#Null)
If(String($answer.nickname)=“simone”)

End if
//End if

</code 4D>

Salut Vincent,
si je comprends bien, la fonction String accepte Null en paramètre et retourne une chaine vide lecaziléchian. Ça mériterait d’être documenté, ça, non ?

off the top of my head I think you get the string “null”

oui,

: Doc

Undefined Expressions
If expression is evaluated to undefined, the command returns an empty
string. This is useful when you expect the result of an expression
(e.g. an object attribute) to be a string, even if it can be undefined.

également vrai pour bool et num qui retournent respectivement 0 et False

<code 4D>
C_LONGINT($L_i;$L_t0)
C_OBJECT($O_answer)
$O_answer:=New object(“cle1”;“data1”;“nickname”;“simone”;“cle2”;“data2”)

//Methode 1 Compact
$L_t0:=Milliseconds
For ($L_i;1;1000000)
If (String($O_answer.nickname)=“simone”)

end if

End for
$L_delais:=Milliseconds-$L_t0
// Résultat 1783 ms
// Avantage > Rapide et code compact
// inconvénient > Ne vérifie pas le type de data,
// ne permet pas de rechercher la valeur Null,
// code un poil exotique

// méthode 2 full notation objet
$L_t0:=Milliseconds
For ($L_i;1;1000000)
If($O_answer.nickname#Null)
If ($O_answer.nickname=“simone”)

	End if 
End if 

End for
$L_delais:=Milliseconds-$L_t0
// Résultat 2417 ms
// Avantage > c’est propre et efficace
// inconvénient > ne permet pas de rechercher la valeur Null,
// plus lent, ne vérifie pas le type de data.

// méthode 3 valide les Null
$L_t0:=Milliseconds
For ($L_i;1;1000000)
If (OB Is defined($O_answer;“nickname”))
If ($O_answer.nickname=“simone”)

	End if 
End if 

End for
$L_delais:=Milliseconds-$L_t0
// Resultat 2795 ms
// Avantage > c’est propre et l’on peut rechercher des null
// inconvénient > c’est lent et ne permet pas de vérifier le type de data.

// Méthode 4 Le sécure
$L_t0:=Milliseconds
For ($L_i;1;1000000)
If (value type($O_answer.nickname)= Is text)
If ($O_answer.nickname=“simone”)

	End if 
End if 

End for
$L_delais:=Milliseconds-$L_t0
// Resultat 2830 ms
// Avantage > c’est propre et sécure (contrôle existence objet + type de data).
// A utiliser si tu ne contrôles pas parfaitement les data.
// inconvénient > c’est lent même si il faut relativiser on parle d’une boucle de 1 millions
</code 4D>

Donc personnellement si j’ai un bon contrôle des data je préfère la méthode 1, si c’est des données de formulaire web ou importer je préfère la méthode 4.