While関数でJSON配列をループ処理実装術
Tips

While関数でJSON配列をループ処理実装術

2026年5月26日 admin Tips

While関数でJSON配列をラクにループ処理しよう

FileMakerでJSONデータを扱う機会が増えると、「JSONの配列を1件ずつ処理したい」「繰り返し処理をスマートに書きたい」と感じる場面が多くなります。従来のスクリプトステップだけでループを書くと、
変数の初期化・ループ条件・カウンタの更新など、どうしても行数が増えてしまいがちです。

そこで活躍するのが While関数 です。While関数を使うと、JSON配列のループ処理を1つの計算式の中で完結させることができ、スクリプトも計算式もスッキリします。

この記事では、専門用語をできるだけ少なくして、「While関数でJSON配列をループ処理する基本的な考え方」と「実際の書き方」を分かりやすく解説します。

While関数ってどんな関数?

While関数は、FileMaker Pro 18以降で使える「繰り返し処理」のための関数です。
ざっくり言うと、「変数を用意して、条件を満たす間、ずっと処理を繰り返す」ための計算式だと考えるとイメージしやすいと思います。

基本的な書き方は次のとおりです。

While ( 
    [ 変数の初期設定 ];
    繰り返しを続ける条件 ;
    1回分の処理内容 ;
    最終的に返したい値
)
  • 変数の初期設定:ループの前に一度だけ設定される値(カウンタや結果用の変数など)
  • 繰り返しを続ける条件:この条件が「真」の間、処理が続きます
  • 1回分の処理内容:JSONから値を取り出したり、文字列を連結したりする部分
  • 最終的に返したい値:ループが終わったあとに、関数の結果として返す値

スクリプトステップの「ループ」と同じようなことを、1つの計算式だけで表現できるのがポイントです。

JSON配列をループする基本の考え方

JSON配列とは、「1件目、2件目、3件目…」というように、同じ形のデータが並んだものです。例えば次のようなJSONがあるとします。

{
  "items": [
    { "name": "りんご", "price": 120 },
    { "name": "みかん", "price": 80 },
    { "name": "バナナ", "price": 100 }
  ]
}

この中の items が配列(Array)です。1件ずつ取り出して処理するには、以下の流れで考えます。

  1. 配列の長さ(件数)を調べる
  2. カウンタ(1からスタートする番号)を用意する
  3. カウンタが件数以下の間、JSONGetElementで1件分ずつ取り出す
  4. 必要な項目だけを取り出して、変数に蓄積していく
  5. カウンタを1つ増やす

この一連の流れを、While関数の中にそのまま書いていくイメージです。

JSON配列をWhile関数でループするサンプル

先ほどのJSONをテキストとして変数 $json に入れてあるとします。
「商品名と価格を1行ずつのテキストにまとめたい」という例でWhile関数を書いてみましょう。

While (
    [
        // 初期設定
        json = $json ;
        count = JSONListValues ( json ; "items[]" ) ;
        i = 0 ;
        result = ""
    ] ;

    // 繰り返し条件
    i < count ;

    // 1回分の処理内容
    [
        item = JSONGetElement ( json ; "items[" & i & "]" ) ;
        name = JSONGetElement ( item ; "name" ) ;
        price = JSONGetElement ( item ; "price" ) ;
        result = 
            List ( result ; name & ":" & price & "円" ) ;
        i = i + 1
    ] ;

    // 最終的に返す値
    result
)

この計算を実行すると、結果は次のようなテキストになります。

りんご:120円
みかん:80円
バナナ:100円

ポイントは、インデックス(i)を0からスタートして、JSONListValuesで取得した件数(count)より小さい間だけ処理を続けていることです。
FileMakerのJSON配列は、items[0] が1件目という数え方になるため、0始まりでループさせるのが自然です。

スクリプトをスッキリさせるコツ

While関数を使うと、今までスクリプトで書いていたループを計算式にまとめられますが、書き方を少し工夫するとさらに見やすくなります。

  • 初期設定・処理内容を「配列形式」で揃える
    While関数の1番目と3番目の引数で、[ 変数 = 値 ; … ] の形を並べて書くと、どこで何をしているかが把握しやすくなります。
  • 名前の付け方を統一する
    i はインデックス、count は件数、result は結果…といったように、意味の分かりやすい名前を付けると、後から読んだときにも理解しやすくなります。
  • JSONGetElementのパスを揃える
    "items[" & i & "].name" のようにドットでつなぐ書き方もできますが、item を先に取り出しておいて JSONGetElement ( item ; "name" ) と分けて書くと、構造がシンプルになります。

実務でよくある利用シーン

While関数とJSON配列の組み合わせは、次のような場面で特に役立ちます。

  • Web APIのレスポンスを処理する
    REST APIなどから受け取ったJSONの一覧データを、FileMakerのレコードに変換したり、帳票用のテキストに変換したりする際に便利です。
  • ポータルのデータをまとめて計算する
    ポータル行を一度JSONに変換しておいて、While関数で集計や整形を行うことで、処理を計算式の中に閉じ込めることができます。
  • 複雑な集計やレポートを1フィールドで表現する
    ルックアップデータや集計値をJSONで持たせておき、表示用フィールドでWhile関数を使ってレポート形式のテキストを組み立てる、といった使い方もあります。

まとめ:While関数でJSON処理を「1か所」に集約する

While関数を使うと、JSON配列のループ処理をスクリプトに分散させるのではなく、1つの計算式にギュッとまとめて書けるようになります。
その結果、スクリプトの行数を減らせるだけでなく、「どのような順番で何をしているのか」が把握しやすくなり、保守もしやすくなります。

最初は少しとっつきにくく感じるかもしれませんが、

  • カウンタ変数(i)を用意する
  • JSONListValuesで件数を取る
  • JSONGetElementで1件ずつ取り出す

という3つのポイントさえ押さえれば、あとはパターン化して応用できます。
JSONを扱う場面が増えてきたら、ぜひWhile関数でのループ処理を試してみてください。

※ 本稿は、生成AIを使用して執筆しています。重要な内容については、必ずご自身でマニュアル等をご確認ください。