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에 사용되는 객체는 객체에 대한 래퍼로, 레거시 지원에 도움이 되도록 일부 쓰기를 캐시에 다시 처리합니다. 직접 객체 업데이트에는 하나의 레벨 또는 래퍼만 지원됩니다. 각 지정은 전체 객체를 캐시에 다시 쓰도록 하는 것이 중요하므로 여러 변경 작업을 수행해야 하는 경우 항상 복사본을 만들어야 합니다.
다음 예는 작동하지 않습니다. 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
도움이 되셨나요?