FileMaker
JSON
FileMakerDay 10

FileMakerでJSONを作ってみよう

はじめに

FileMakerに入っているデータを他システムで使うときに、
バックエンドのシステムにはCSVかODBCを使って連携し、
フロントエンドにはJSONを使ってJavaScriptでいい感じに調理してもらっています。

そこで、今までは文字列で作っていたJSONファイルを、
FileMaker16から追加されたJSON関数を使って、
注目されがちな「使う」側ではなく「作って」みたいなと思います。

作成したいJSONの形

今回は練習がてら、FileMakerのヘルプにある、
JSON データの例を作成してみたいなと思います。
もちろん、環境はFileMaker 16 (またはAdvanced)

作ってみた

何はともあれ、テーブルを作成します。
JSON データの例で言うと、製品の下の内容ですね。

定義.jpg

こんな感じです。
各フィールドに適当な値を入れて、複数レコード作成しておきます。

定義.jpg

で、Loopで回しながらデータを作って行くのですが、
初めてJSONSetElement使うときに、ヘルプの内容が分かりにくかったので。。。
分かりやすい(?)ようにかなり丁寧に書いてみました。

定義.jpg

いかがでしょうか?
実行すれば、次のような結果になると思います。

定義.jpg

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にアップしてみたいと思います!