初心者にもわかるファイルメーカーの
使い方

JSON関数の階層化

2020-11-11 |  

こんにちは、最近スマホの目覚ましアラームの耐性を獲得した山本です。音変えます。

今回の内容はJSON関数の階層化をやりたいと思います。
いや今更?数多の人が解説し尽くしたでしょと感じるかもしれませんが関係ありません。
私が書きたいから書くのです。
JSON関数の階層化とは、json関数を入れ子にすることで1つのキーに対して複数の値をセットできるようになります。
これによって引数のジャンル分けができるので、特定のスクリプトでしか使わない引数を指定して取り出すことができます。

・JSONとは

JSON(JavaScript Object Notation)とはざっくりいうと、”名前と値でセットにしたデータ”の交換式です。
この交換式の形式に従って記述すれば、C、C++、C#、Java、JavaScript、Perl、Pythonなど多言語でデータを受け渡しできるという素敵な式です。

・JSON関数の構文

JSON関数はfilemaker19の時点で6種類あります。

一度に全て覚えるのは大変なので、今回はjson式にデータを組むJSONSetElementと、そこから値を取り出すJSONGetElementを使います。
この2つを使えるようになれば残りの4つも簡単に理解できるようになります。
では、まずデータを組むJSONSetElementから。

JSONSetElement ( json ; キーまたは索引またはパス ; 値 ; タイプ )
“json”

・既にあるjsonのデータ形式に組み込む時はその変数名をいれることで追加して値を設定できます。
なければ “” を入れます。

“キーまたは索引またはパス”

・jsonは”名前と値をセットにしたデータ交換式”なので組み込みたいデータの名前を任意で設定します。
これはJSONGetElement関数でデータを指定するときに使います。

“値”

・データの値を入れます。

“タイプ”

・データの形式を決めます。

(例)
変数名::$profile 値::
JSONSetElement ( "" ;
[ "趣味" ; "RogeCompany" ; JSONString] ;
[ "性別" ; "男" ; JSONString] ;
[ "名前" ; "山本" ; JSONString]
)

複数の値を一度にセットしたいときは”[]”で括って”;”で区切りましょう。

次はJSONGetElementで値を取り出します。

JSONGetElement ( json ; キーまたは索引またはパス )
“json”

・取り出すjson式を指定します。

“キーまたは索引またはパス”

・取り出すデータの値にあたる名前(キー、索引、パス)を指定します。
(例) 結果:: “RogeCompany”
JSONGetElement ( $profile ; "趣味" )

・階層化

では階層化を説明していきたいと思います。百聞は一見に如かずということで最初に例題を載せます。

変数名::$profile 値::
JSONSetElement ( "" ;
[ "人[0].趣味" ; "RogeCompany" ; JSONString] ;
[ "人[0].性別" ; "男" ; JSONString] ;
[ "人[0].名前" ; "山本" ; JSONString] ;
[ "人[1].趣味" ; "APEX" ; JSONString] ;
[ "人[1].性別" ; "男" ; JSONString] ;
[ "人[1].名前" ; "川本" ; JSONString]
)
(例) 結果:: “APEX”
JSONGetElement ( $profile ; "人[1].趣味" )

階層化にあたって新しく追加されたところは”[n]”と”.”ですね。この2つが非常に重要になってきます。

“[n]”

・これは値の索引を設定しています。索引とセットで指定することでデータを取得できますが、そもそもの名前(今回だと”人”)を同じにしなければなくても階層化できます。さらに数字の昇順でデータがソートされます(0~の連番にしなければなりません)。

“.”

・このドットは”左の名前の下に位置する”という意味合いがあります。ので ”人[1].性別” は人[1]の下に位置している階層の”性別”の値。つまり”APEX”を指定していることになります。

・まとめ

JSON関数の階層化には ”[n]”と”.” を使うと実現できます。冒頭でも書きましたが、これによって引数をジャンル分けできるので、引数を柔軟に設定することができます。ぜひお試しください。