JSON DAT 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

JSON DAT が JSONPath クエリで入力 JSON をフィルタリングし、テーブル形式で出力する様子を示す図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – JSONを解析して整形する

JSON DATは、入力された JSON テキストに JSONPath フィルタを適用し、結果を Python / Indented / Table / Double Quotes のいずれかの形式に整形して出力する DATです。JSONPath 構文で JSON 構造内の任意の値を抽出でき、Output Format を切り替えるだけで後段 Table DAT として直接接続したり、Python の単引用符表記を正式な JSON 二重引用符表記に変換したりできます。

主な用途 🎯

  • Web Client DAT 等で取得した API レスポンス JSON を JSONPath で部分抽出し、後段で扱いやすい形に絞り込む
  • Output Formattable に切り替え、JSON の配列 / オブジェクトをそのまま Table DAT として後段に流す
  • ネストの深い JSON 構造から 特定の値・配列要素 をクエリで取り出し、CHOP / TOP / シェーダの uniform 値として活用する
  • Python の repr() 形式 (単引用符) で得られる JSON 風文字列を 正式な JSON 形式 (二重引用符) に変換し、外部システムへ送出可能な状態に整える
  • Hold Last Non-Empty Results を有効化し、ネットワーク断や一時的な空応答でも直前の有効値を保持して下流処理の途絶を防ぐ

データフロー 🔄

入力: JSON 文字列 (Web Client DAT / Text DAT 等)

JSONPath フィルタ + Output / Output Format 設定で整形

出力: フィルタ結果テキスト or Table DAT 形式

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

JSON Page 📋

Filter .filter 🎚️

入力 JSON に対して適用する JSONPath クエリ文字列:

  • Filter: filter — JSONPath 構文に従ったフィルタ文字列。入力 JSON の任意のノード・配列要素・条件マッチ要素を抽出する

Output .output 📤

JSON DAT が出力する内容の選択

項目 内部名 説明
Filter Result .filterresult 入力 JSON テキストに Filter を適用した結果のリストを出力

Expression .expression 🧮

カスタム式で出力内容を上書きする場合の任意の Python 式:

  • Expression: expression — Output として出力する独自の Python 式。空のままなら Output 設定値がそのまま使われる

Output Format .outputformat 🎛️

DAT 出力テキストのフォーマット選択

項目 内部名 説明
None .none 整形なし。実質的に Python 表記 (単引用符) のまま出力
Indented .indented インデント整形 + 単引用符を二重引用符に変換
Table .table JSON 出力をテーブル形式で展開。ルートが list なら 1 列の値列、dict なら 1 行目に key、2 行目以降に value。list of dict なら 1 行目に key 群、各行に各 dict の value が並ぶ
Double Quotes .doublequotes 単引用符を二重引用符に変換 (インデント整形なし)

※ 注意: Output Format を Table にした場合の列構造は入力 JSON のルート構造に依存します。list of dict 入力時、ある dict に他より少ない key しか含まれない場合、その行の該当列は空セルとして出力されます。

引用元: 公式 docs

Hold Last Non-Empty Results .holdlast

結果が空になった場合に直前の非空結果を保持するかのトグル:

  • Hold Last Non-Empty Results: holdlast — 有効時は結果が空になったとき直前の非空結果が保持され、新たな非空結果が来た時だけ出力が更新される

Common Page 🔧

Language .language 📝

DAT が動作するスクリプト言語の決定方法

項目 内部名 説明
Input .input 入力 DAT のスクリプト言語を使用
Node .node この DAT 自身のスクリプト言語を使用

Edit/View Extension .extension 📄

外部エディタに公開するファイル拡張子の選択

項目 内部名 説明
dat .dat 汎用的なファイル拡張子 dat を使用
From Language .language DAT のスクリプト言語に応じた拡張子を自動選択
Custom Extension .custom Custom Extension で指定したカスタム拡張子を使用

Custom Extension .customext 🔤

Edit/View ExtensionCustom Extension のときに適用される拡張子:

  • Custom Extension 文字列: Edit/View Extensioncustom のときに使用される任意のファイル拡張子

Word Wrap .wordwrap 🔁

ノード表示でのワードラップ (折り返し) の有効化

項目 内部名 説明
Input .input 入力 DAT の Word Wrap 設定を継承
On .on Word Wrap を有効化 (ノード上の長い行を折り返し表示)
Off .off Word Wrap を無効化 (折り返さずそのまま表示)

実践アイデア 💡

Example 1: Web API レスポンスの特定フィールド抽出 🌐

Web Client DAT → JSON DAT (Filter: $.results[*].temperature, Output Format: Indented) → Text DAT (display)

外部 Web API から取得した気象データの JSON レスポンスに対し、JSON DAT で気温フィールドだけを JSONPath クエリで抽出し、後段の Text DAT に表示する基本フロー。

  1. Web Client DAT で API エンドポイントを叩いて JSON レスポンスを取得
  2. JSON DAT を Web Client DAT の出力に接続
  3. Filter に $.results[*].temperature など必要な値のパスを指定
  4. Output Format を Indented にして可読性の高い JSON 形式で出力

Example 2: JSON 配列を Table DAT として後段で利用 📊

Text DAT (JSON 配列) → JSON DAT (Output Format: Table) → DAT to CHOP / Lookup

JSON の配列構造をそのままテーブルとして扱い、Table DAT 系の後段オペレータ (DAT to CHOP / Lookup CHOP 等) に接続して動的にデータ駆動の処理に流し込む活用例。

  1. Text DAT に list of dict 形式の JSON を配置
  2. JSON DAT を接続し Output Format を Table に設定
  3. 1 行目に key 群、以降の行に各 dict の値が並ぶ Table DAT として出力される
  4. DAT to CHOP 等の後段オペレータでテーブルの列を CHOP チャンネルとして取り込み

Example 3: Python repr風文字列を正式JSONに整形 🔁

Python 出力 DAT → JSON DAT (Output Format: Double Quotes) → File Out DAT

Python の str()repr() で単引用符付きの dict / list を文字列化した出力を、正式な JSON 仕様 (二重引用符) に変換して外部システムに送出する整形ユースケース。

  1. Python 系 DAT で dict / list を文字列出力 (単引用符を含む)
  2. JSON DAT に接続し Output Format を Double Quotes に設定
  3. 単引用符が二重引用符へ変換され、外部システムが受け取れる JSON テキストになる

関連オペレータ 🔗

類似機能OP 🔍

  • XML DAT — XML 入力に対する同等の構造化解析・抽出 DAT

組み合わせ推奨OP 🔄

  • Web Client DAT — 外部 API から JSON レスポンスを取得して JSON DAT に渡す前段
  • Table DAT — Output Format=Table での出力先・参照テーブル
  • Convert DAT — CSV/TSV など他フォーマット ↔ JSON を含む相互変換に併用
  • Evaluate DAT — JSON 抽出後の値に対してさらに数式・Python 式を適用

前処理・後処理DAT 🎯


Info CHOP情報 📊

JSON DAT は Info CHOP / Info DAT による詳細情報取得に対応しています。Output Format=Table で出力した場合、テーブルの行数・列数といった構造情報を取得して後段の判定処理にそのまま活用できます。

主に取得できる情報:

  • num_rows — Output Format=Table 時のテーブル行数
  • num_cols — Output Format=Table 時のテーブル列数
  • total_cooks — この DAT がクック (再評価) された累積回数
  • last_cook_time — 最後のクックに要した時間 (ms)
  • cook_frame — 最後にクックされたフレーム番号

DAT 固有情報 📋

  • num_rows: DAT の行数
  • num_cols: DAT の列数
  • type: DAT の型 (table / text)
  • is_table: テーブル形式の場合 1、テキスト形式の場合 0

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間 (ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: Filter 結果が空になる / 期待した値が抽出されない
✅ Solution:

  • JSONPath の構文を再確認 ($. がルート、[*] が全要素、.. が再帰下降)
  • まずは $$.* など最小のクエリから始め、出力を見ながら段階的にフィルタを絞り込む
  • Hold Last Non-Empty Results をオンにしておくと、一時的に空応答が来ても直前の有効値で下流処理が止まらない

❌ Problem: Output Format=Table にしてもテーブルにならない / 列がズレる
✅ Solution:

  • ルートが list / dict / list of dict のいずれかである必要があるため、Filter を調整して期待する構造を抽出する
  • list of dict の場合は全 dict が同じ key 集合を持っていないと空セルが発生する。前段の Convert DAT や Python 処理で key を揃える
  • 後段で Table DAT を挟むことで、出力結果を明示的にテーブルとして扱える状態にする

❌ Problem: JSON が単引用符のまま出力されて外部システムに受け取ってもらえない
✅ Solution:

  • Output Format を None から Indented または Double Quotes に変更する
  • Python の str(dict) / repr() 出力は単引用符を含むため、外部送出前に JSON DAT を必ず経由させる
  • 後段で Convert DAT を併用してエンコーディングや改行コードもまとめて整える

参考資料 📚

その他 🔗

公式リソース 📖

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました