Dictionary型データのArrayフィールドへの格納について
環境:kompira 1.6.3
ジョブフロー上で辞書データを配列に格納した場合では辞書型のまま取り出せるのですが、一時的にオブジェクトのArrayフィールドに格納して後から値を取り出したい場合、
どのように記述するのが適切でしょうか?
(ジョブフロー上の配列変数ではそのままDictionary型として持てる)
[dict = { 'key1': 'aaa', 'key2': 'bbb'}] ->
print(type(dict)) -> # Dictionary型
[arr = []]->
[arr.add_item: dict] ->
print(type(arr[0])) -> # Dictionary型
print(arr[0].key1) # 配列からkey1の値を取り出す
(オブジェクトの配列に辞書データを格納して後から参照したい)
【前提】
obj
フィールド名: フィールド型
arr : Array
[dict = { 'key1': 'aaa', 'key2': 'bbb'}] ->
[./obj.arr.add_item: dict] ->
print(type(./obj.arr[0])) -> # String型になる
[json = json_dump(dict)] -> # 格納前にjson_dump
[./obj.arr.add_item: json] ->
print(json_parse(./obj.arr[1]).key1) # 取り出しの際にjson_parseすれば値取り出せる
現状、上記のようにして対応しているのですが、
他に何か良い方法(ジョブフローの書き方やオブジェクトの設定等)ございましたらご教示いただければと思います。
-
正式なコメント
Array型フィールドの要素は文字列となりますので、当該フィールドに辞書データを要素に持つ配列を書き込んだ場合は、自動的に辞書データの要素が文字列に変換されて格納されます。
そのため、辞書データの構造を保存したまま、Array型フィールドに格納するには、上記の対応のように各要素をJSON文字列に変換して保存、また、読み込んだ後にJSON文字列をパースして辞書型に戻す、といった処理が必要となります。
Kompiraの将来的な機能追加で、JSONフィールド型やArray<JSON>フィールド型のようなものを追加して、辞書データをジョブフローで明示的に変換することなく、読み書きができるように検討を進めたいと思います。
コメントアクション
サインインしてコメントを残してください。
コメント
2件のコメント