n8nで「JSON Parse Error」が出たら読む記事!3分で解決する修正テクニックと原因特定ガイド

n8nのJSON Parse Error解決ガイド。3分で修正するテクニックと原因特定方法 TITLE: n8nでJSON Parse Errorが出たら読む記事 FILENAME: n8n-json-parse-error-fix.png AI開発フレームワーク・ツール

「順調にワークフローを作っていたのに、突然の赤いエラー画面。『JSON Parse Error』って何!?」

n8nを使っていると、必ず一度はこの壁にぶつかります。特にAPI連携やOpenAI(ChatGPT)からの出力を処理しようとした時に頻発するこのエラー。見慣れない英語のメッセージに焦る必要はありません。

これは、n8nが「渡されたデータが、約束通りの形式(JSON)になっていないから読めないよ!」と教えてくれているだけです。

この記事では、n8nで発生するJSONエラーの正体を解き明かし、非エンジニアでもコピペで直せる具体的な解決策を3つのパターンに分けて解説します。

【結論】エラー原因の9割は「余計な文字」か「カッコの閉じ忘れ」

結論から言うと、JSONパースエラーのほとんどは、データの中に本来あってはならない文字(ゴミ)が混ざっているか、カッコ { } や引用符 " " の不整合が原因です。

特に最近多いのが、AI(ChatGPT等)が親切心で付け加えた「“`json」というマークダウン記法が原因でエラーになるケースです。これを削除(クリーニング)するだけで、嘘のように動きます。

そもそも「JSONパース」とは?イメージで理解する

技術的な話に入る前に、イメージを共有しましょう。

  • JSON(ジェイソン): データを運ぶための「専用の段ボール箱」。荷物の詰め方に厳密なルールがあります。
  • Parse(パース): 届いた段ボール箱を開けて、中身を取り出し、使える状態にすること(荷解き)。
  • JSON Parse Error: 「段ボールが潰れている」あるいは「詰め方のルールが守られていない」ため、n8nが箱を開けられずに困っている状態です。

n8nは「箱が開かないと次の作業ができない」ため、そこでワークフローを緊急停止させます。これがエラーの正体です。

【完全ガイド】パターン別!エラー解決ステップ

Pattern A: AIの出力に「“`json … “`」が含まれている場合

OpenAIなどのLLMノードを使った後に最も多いエラーです。AIはコードを見やすくするために、JSONの前後にマークダウンの装飾をつけてしまいます。

解決策: Codeノードで「お掃除」する

AIノードの直後に Code ノードを追加し、以下のJavaScriptコードをコピペしてください。これは、JSONの前後にこびりついた装飾を強制的に削除する強力なクリーナーです。

// 前のノードからの出力を取得
const inputContent = items[0].json.content; 

// ```json や ``` というマークダウン記法を削除する正規表現
const cleanJson = inputContent.replace(/^```json\s*/, "").replace(/^```\s*/, "").replace(/\s*```$/, "");

// キレイになったテキストをJSONとしてパース(変換)して出力
return [{
  json: JSON.parse(cleanJson)
}];

items[0].json.content の部分は、実際にあなたのAIノードが出力しているプロパティ名(例: textoutput 等)に合わせて書き換えてください。

Pattern B: ダブルクォート " のミス

JSONのルールでは、キー(名前)と値(中身)は必ずダブルクォート " で囲む必要があります。シングルクォート ' ではエラーになります。

  • ❌ 悪い例: { 'name': 'Taro' } (シングルクォートはダメ)
  • ⭕ 良い例: { "name": "Taro" }

また、文章の中にダブルクォートが含まれている場合(例: "彼は "Hello" と言った")、外側の引用符と区別がつかなくなります。この場合は、バックスラッシュ \ を使って「エスケープ処理」をする必要があります(例: "彼は \"Hello\" と言った")。

Pattern C: APIから「文字列(String)」として届いている

APIによっては、中身はJSONの形をしているのに、n8nがそれを「ただの長い文字列」として認識してしまうことがあります。
プレビュー画面でデータを見た時、データの構造がツリー状に展開できず、ベタ打ちのテキストに見える場合はこれです。

解決策: 「Edit Fields」ノードでパースする

以前の JSON Parse ノードの機能は、現在 Edit Fields (Set) ノードなどに統合されています。

  1. Edit Fields ノードを追加します。
  2. 変換したいフィールドを選び、値の設定で「Expression(式)」モードにします。
  3. {{ JSON.parse($json.your_field_name) }} のように記述します。

これで、文字列扱いされていたデータが、n8nが扱える「オブジェクト(構造化データ)」に生まれ変わります。

[関連テクニック] エラーを未然に防ぐ「検証」ツール

「どこが間違っているのか目で見てわからない!」という場合は、人間の目で探すのを諦めて、無料の検証ツールを使いましょう。

  • JSONLint (jsonlint.com): エラーが出ているJSONテキストをコピーして貼り付けるだけで、「何行目のどこがおかしいか」をピンポイントで指摘し、正しい形に整形してくれます。

よくある質問 (Q&A)

Q1. エラーメッセージ「Unexpected token < in JSON at position 0」とは?

これは「JSONが来ると思ったら、HTMLが返ってきた」という典型的エラーです。
APIのURLが間違っていて「404 Not Found」ページ(HTML)が返ってきているか、サーバーエラー画面が返ってきている可能性が高いです。JSONの中身ではなく、接続先の設定や認証キーを見直してください。

Q2. 最後の項目にカンマ , があるとエラーになりますか?

はい、厳密なJSONルールでは、リストの最後の項目の後にカンマをつけてはいけません(Trailing Commaの禁止)。
{ "a": 1, "b": 2, } ← 最後のカンマを削除してください。

Q3. n8nのAIノードに「Structured Output」機能はありますか?

はい、最新のOpenAI Chat Modelノードなどには、出力を強制的にJSONにする機能(Response Format: JSON Object)があります。これを使うと、Pattern Aのようなマークダウン混入エラーをAPI側で防げるため、非常に推奨されます。

まとめ

JSONパースエラーは、データの「梱包トラブル」です。

  1. AIの出力なら、Codeノードで ```json を削除する。
  2. 構文エラーなら、JSONLint で場所を特定する。
  3. 文字列扱いなら、JSON.parse() で展開する。

この3つの対処法を知っていれば、もう赤いエラー画面も怖くありません。エラーが出たら「お、クリーニングのチャンスだな」と思って対処しましょう!

参考文献・リンク

コメント

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