Utilisation des objets JSON
Les objets JSON et tous les autres objets se comportent comme les objets de table d'informations : ce sont tous des clones.
Par exemple :
Le code suivant provoque un comportement inattendu. Il semblera être défini, mais la modification ne sera pas réellement conservée s'il s'agit d'une propriété persistante. Il s'agit du même comportement que celui que vous verriez dans ThingWorx 8.4. La version en mémoire de la valeur est modifiée, mais elle ne persiste pas correctement.
me.jsonProp['key'] = 'newValue';
Pour travailler correctement avec les objets JSON, vous pouvez affecter une chaîne JSON à la valeur de propriété :
me.jsonProp= {'key':'newValue'};
Vous pouvez, si vous le souhaitez, faire une copie de la propriété, effectuer des mises à jour, puis les réaffecter à la propriété d'origine :
var json = me.jsonProp;
json['key'] = 'newValue';
me.jsonProp = json;
Toutes les valeurs de propriété sont stockées dans une couche de cache. L'objet utilisé dans le JavaScript n'est qu'un wrapper de l'objet, qui gère certaines réécritures dans le cache pour aider à la prise en charge héritée. Un seul niveau ou wrapper est pris en charge pour les mises à jour d'objet directes. Il est important de savoir que chaque affectation réécrit la totalité de l'objet dans le cache, de sorte que vous devez toujours effectuer une copie lorsque vous devez apporter plusieurs modifications.
L'exemple suivant ne fonctionne pas. L'objet json est un wrapper de l'objet d'origine, mais unit est un sous-objet, et pas un wrapper. Ainsi, l'affectation de .unit ne réécrit pas la valeur dans l'objet mis en cache :
input.recurrent.unit = "MB"
Vous pouvez utiliser l'une des solutions suivantes :
Travaillez sur une sous-partie du document, et réattribuez-la :
json = input.recurrent
json.unit = "MB";
input.recurrent = json <--- this does a cache update
Pour optimiser les performances, si vous devez mettre à jour plusieurs valeurs dans le JSON, faites toujours une copie de l'objet entier, travaillez dessus, puis réaffectez-le.
json = JSON.parse(input);
json.recurrent.unit ="MB";
input = json <--- this does a cache update
Pour optimiser les performances, vous devez limiter les écritures dans le cache. Les écritures peuvent s'effectuer assez rapidement en mode serveur unique, mais en mode cluster haute disponibilité, le cache est distribué. Ainsi, chaque écriture affecte les performances.
input.value = 5 <--- this does a cache update
input.text = "junk" <--- this does a cache update
Est-ce que cela a été utile ?