はじめに
FileMakerに入っているデータを他システムで使うときに、
バックエンドのシステムにはCSVかODBCを使って連携し、
フロントエンドにはJSONを使ってJavaScriptでいい感じに調理してもらっています。
そこで、今までは文字列で作っていたJSONファイルを、
FileMaker16から追加されたJSON関数を使って、
注目されがちな「使う」側ではなく「作って」みたいなと思います。
作成したいJSONの形
今回は練習がてら、FileMakerのヘルプにある、
JSON データの例を作成してみたいなと思います。
もちろん、環境はFileMaker 16 (またはAdvanced)
作ってみた
何はともあれ、テーブルを作成します。
JSON データの例で言うと、製品の下の内容ですね。
こんな感じです。
各フィールドに適当な値を入れて、複数レコード作成しておきます。
で、Loopで回しながらデータを作って行くのですが、
初めてJSONSetElement使うときに、ヘルプの内容が分かりにくかったので。。。
分かりやすい(?)ようにかなり丁寧に書いてみました。
いかがでしょうか?
実行すれば、次のような結果になると思います。
JSONSetElementで追加すると、ソートがかかるんでしょうか?
全く例と同じとまではいきませんが、内容的には同じJSONが作れたと思います。
実際はここまで丁寧にしなくても、
例えば1~6行目は無くても同じ結果が出ます。
が、どういうことをするんだろう?ということが
イメージして頂けたらありがたいです。
ヘルプの解説?
JSON データの例に、コメントを追加してみました。
# 「$NewProduct」という変数に、「製品」配列に追加する子要素を作成する
# Substituteみたいに、[]で複数まとめてセットできるみたいです。
# 最初の「"{}"」はよく分からない。。。「""」でも同じでした。
# -----ここから-----
変数を設定 [ $NewProduct ; 値 :
JSONSetElement ( "{}" ;
[ "ID" ; "FB4" ; JSONString ] ;
[ "名前" ; "バニラケーキ" ; JSONString ] ;
[ "価格" ; 17.5 ; JSONNumber ] ;
[ "在庫" ; 12 ; JSONNumber ] ;
[ "カテゴリ" ; "ケーキ" ; JSONString ] ;
[ "特売" ; true ; JSONBoolean ]
) ]
# -----ここまで-----
# ベーカリー.製品が配列なので、「JSONListKeys」の結果を「ValueCount」することで
# 既に何個登録されているか?を取得しています。
# -----ここから-----
変数を設定 [ $NextIndex ; 値 :
ValueCount (
JSONListKeys ( $$JSON ; "ベーカリー.製品" )
) ]
# -----ここまで-----
# 配列は0始まりなので、個数-1が配列の最大になる。
# ここでは個数($NextIndex)を入れることで、最大+1の位置に、
# 作成した$NewProductの内容を追記しようとしています。
# -----ここから-----
変数を設定 [ $$JSON ; 値 :
JSONSetElement (
$$JSON ; "ベーカリー.製品[" & $NextIndex & "]" ; $NewProduct ;
JSONObject
) ]
# -----ここまで-----
余計にごちゃっとして見にくくなってしまいましたが^^;
先ほどの内容に比べると、すごくスマートにしていますよね!
まとめ
無事に思っている形のJSONが作成できました。
初め、ヘルプを理解するまでいろいろ調べましたが、
あまりJSONSetElementしている人がいなかったのは、需要が少ないんでしょうかね?
それにしても、FileMakerのヘルプの例が分かりにくいと思うのは私だけでしょうか・・・?
次回は作成したJSONをFTPにアップしてみたいと思います!



