OutSystemsでデータをJSON形式に変換するJSON Serializeの結果がどうなるのか確認してみました。
JSON Deserializeに渡して使う場合は、気にしなくていいのですが、JavaScriptとやりとりするときには知っておきたいので。
きっかけは、Aggregateで取得した結果をJSON SerializeしてJavaScriptライブラリのAPIに渡すとうまく表示されなかったことです。
いくつかのパターンで確認してみましたが、想定通りの結果が返ってきました。
Aggregateの構成はうっかりすると誤解しますが、各レコードが{“Entity名”:{Entityのレコードを展開したオブジェクト},…}の形式になることだけ覚えておけば大丈夫そうです。
動作確認環境
Platform Version:11.0.212.0
Service Studio Version:11.0.522.0
Table of Contents
確認方法
テスト用の画面を作成し、以下の型の変数をPreparation内でJSON Serializeして、その結果を画面内で表示することで確認します。
対象:
- Basic Data Type
- Aggregateの結果
- List of Basic Data Type
- Record
- 階層構造のStructure(他のStructureをAttributeに持つStructure)
結果
Basic Data Type
JSON Serializeの対象外です。指定すると以下のメッセージが出ました。対象データ型はRecordかList of Recordsと公式ドキュメントにも書いてありますね。
‘Record or Record List’ data type is required instead of ‘Integer’.
Aggregateの結果
フォーマット:[{“Entity名”: {“Attribute名”: 値, “Attribute名”, … },…}]
例:[{“ContactWithUser”:{“Id”:116,”Name”:”Abel Pasquale”,”Address”:”Abel.Pasquale@mail.com”,”BirthDate”:”1998-07-18″,”City”:”San Francisco, USA”,”UserId”:11}},{“ContactWithUser”:{“Id”…
全体がListなので、JSONの配列([])に対応していますね。
各レコードは、JSON Object({})。Aggregateに含まれるEntity分だけ、”Entity名”をプロパティに、そのEntityのレコードがJSON Objectとしてぶら下がる形。
この例の場合は、ContactWithUserというEntity1つだけでAggregateが構成されています。
List of Basic Data Type
例: [11,31,19]
これは例だけで明らかですね。Integer Listの場合です。
Record
Entity1つとBasic Data Type2つでRecordを作ってJSON Serializeしてみました。
例:{“ContactWithUser”:{“Id”:91,”Name”:”Zbyszek Piestrzeniewicz”,”Address”:”Zbyszek.Piestrzeniewicz@mail.com”,”BirthDate”:”1998-06-23″,”City”:”Denver, USA”,”UserId”:2},”Boolean”:true,”Intgeger”:33}
これも例を見れば明らかですね。Recordの各Attribute名をプロパティにしています。
階層構造のStructure
他のStructureをAttributeに持つStructure。
子のStructureは、Integer型とBoolean型を1つずつ持つ。
親は子のStructureとInteger型を1つずつ持つ構造。
例: {“ChildStructure”:{“Integer”:123,”Boolean”:true},”Integer”:234}