JSON オブジェクトの操作
JSON オブジェクトおよびその他すべてのオブジェクトは、インフォテーブルオブジェクトと同様に動作します。これらはすべてクローンです。
以下に例を示します。
以下のコードを実行すると、予期しない動作が発生します。これは整っているように見えますが、永続プロパティである場合、実際には変更は永続化されません。これは ThingWorx 8.4 で見られる動作と同じです。メモリ内バージョンの値は変更されますが、正しく永続化されません。
me.jsonProp['key'] = 'newValue';
JSON オブジェクトを正しく操作するため、以下のように JSON 文字列をプロパティ値に割り当てることができます。
me.jsonProp= {'key':'newValue'};
または、プロパティのコピーを作成して更新してから、元のプロパティに再度割り当てることができます。
var json = me.jsonProp;
json['key'] = 'newValue';
me.jsonProp = json;
すべてのプロパティ値はキャッシュレイヤーに保存されます。JavaScript で使用されるオブジェクトはオブジェクトへの単なるラッパーであり、これはキャッシュへの一部の書き戻しを処理してレガシーサポートを支援します。オブジェクトの直接更新ではレベルまたはラッパーは 1 つだけサポートされています。各割当でオブジェクト全体がキャッシュに書き戻されるので、複数の変更を行う必要がある場合には必ずコピーを作成する必要があることを理解しておくことが重要です。
以下の例は機能しません。json オブジェクトは元のオブジェクトへのラッパーですが、unit はサブオブジェクトであり、ラッパーではありません。したがって、.unit を割り当てても、キャッシュされたオブジェクトには値が書き戻されません。
input.recurrent.unit = "MB"
以下のいずれかの次善策を使用できます。
ドキュメントのサブセクションで作業を行い、再び割り当てます。
json = input.recurrent
json.unit = "MB";
input.recurrent = json <--- this does a cache update
JSON で複数の値を更新する必要がある場合、必ずオブジェクト全体のコピーを作成し、そこで作業を行ってから再び割り当てることで、最適なパフォーマンスが得られます。
json = JSON.parse(input);
json.recurrent.unit ="MB";
input = json <--- this does a cache update
最適なパフォーマンスを得るためには、キャッシュへの書き込みを制限する必要があります。単一サーバーモードでは比較的高速で書き込まれますが、高可用性クラスタモードではキャッシュが分散しているので、各書き込みがパフォーマンスに影響を与えます。
input.value = 5 <--- this does a cache update
input.text = "junk" <--- this does a cache update
これは役に立ちましたか?