
概要 📖 – 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 Format を
tableに切り替え、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 形式
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
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 しか含まれない場合、その行の該当列は空セルとして出力されます。
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 Extension が Custom Extension のときに適用される拡張子:
- Custom Extension 文字列:
Edit/View Extensionがcustomのときに使用される任意のファイル拡張子
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 に表示する基本フロー。
- Web Client DAT で API エンドポイントを叩いて JSON レスポンスを取得
- JSON DAT を Web Client DAT の出力に接続
- Filter に
$.results[*].temperatureなど必要な値のパスを指定 - 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 等) に接続して動的にデータ駆動の処理に流し込む活用例。
- Text DAT に list of dict 形式の JSON を配置
- JSON DAT を接続し Output Format を
Tableに設定 - 1 行目に key 群、以降の行に各 dict の値が並ぶ Table DAT として出力される
- 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 仕様 (二重引用符) に変換して外部システムに送出する整形ユースケース。
- Python 系 DAT で dict / list を文字列出力 (単引用符を含む)
- JSON DAT に接続し Output Format を
Double Quotesに設定 - 単引用符が二重引用符へ変換され、外部システムが受け取れる 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 🎯
- 前処理: Web Client DAT、Text DAT、OSC In DAT、Substitute DAT
- 後処理: Table DAT、Convert DAT、Evaluate DAT、Execute 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 を併用してエンコーディングや改行コードもまとめて整える
参考資料 📚
その他 🔗
- TouchDesigner Wiki — DAT 概要
- TouchDesigner Wiki — Category:DATs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – JSON DAT
- TouchDesigner公式ドキュメント – Web Client DAT (JSON DAT の代表的な前段)
- TouchDesigner公式ドキュメント – Table DAT (Output Format=Table の出力先)

