「順調にワークフローを作っていたのに、突然の赤いエラー画面。『JSON Parse Error』って何!?」
n8nを使っていると、必ず一度はこの壁にぶつかります。特にAPI連携やOpenAI(ChatGPT)からの出力を処理しようとした時に頻発するこのエラー。見慣れない英語のメッセージに焦る必要はありません。
これは、n8nが「渡されたデータが、約束通りの形式(JSON)になっていないから読めないよ!」と教えてくれているだけです。
この記事では、n8nで発生するJSONエラーの正体を解き明かし、非エンジニアでもコピペで直せる具体的な解決策を3つのパターンに分けて解説します。
—
私はランサーズ・クラウドワークスでn8n・自動化ワークフローの構築案件を累計200件以上受注していますが、新規クライアントのプロジェクトで最初につまずくポイントの筆頭が、このJSONパースエラーです。
あるEC事業者の在庫管理自動化案件で、ChatGPTノードからの出力を次のノードに渡した瞬間にワークフローが停止しました。確認すると、AIが親切にも出力の前後に ` `json という装飾を付けていたのが原因でした。Codeノードに1行クリーニングを挟むだけで即解決しましたが、初見だと焦ります。この記事はそういう方向けに書いています。
---
【結論】エラー原因の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の前後にこびりついた装飾を強制的に削除する強力なクリーナーです。
`javascript
// 前のノードからの出力を取得
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ノードが出力しているプロパティ名(例: text や output 等)に合わせて書き換えてください。
Pattern B: ダブルクォート “ のミス
JSONのルールでは、キー(名前)と値(中身)は必ずダブルクォート “ で囲む必要があります。シングルクォート ‘ ではエラーになります。
- ❌ 悪い例: { ‘name’: ‘Taro’ }
(シングルクォートはダメ) - ⭕ 良い例: { “name”: “Taro” }
また、文章の中にダブルクォートが含まれている場合(例: “彼は “Hello” と言った”)、外側の引用符と区別がつかなくなります。この場合は、バックスラッシュ \ を使って「エスケープ処理」をする必要があります(例: “彼は \”Hello\” と言った”)。
Pattern C: APIから「文字列(String)」として届いている
APIによっては、中身はJSONの形をしているのに、n8nがそれを「ただの長い文字列」として認識してしまうことがあります。
プレビュー画面でデータを見た時、データの構造がツリー状に展開できず、ベタ打ちのテキストに見える場合はこれです。
#### n8n v1.0以降:独立した「JSON Parse」ノードが廃止された背景
以前のn8nには「JSON Parse」という専用ノードが存在していましたが、n8n v1.0(2023年リリース)へのメジャーバージョンアップに伴うノード体系の整理で廃止されました。現在その機能は Edit Fields (Set) ノードのExpressionモードに統合されています。
古いチュートリアルや記事で「JSON Parseノードを追加して…」と書かれていても最新のn8nで見当たらない場合は、これが理由です。
#### 解決策: 「Edit Fields」ノードで JSON.parse() を使う
Edit Fields (Set) ノードを追加し、以下の手順で設定します。
1. 「Add field」でフィールドを追加する
2. Value欄の右端にある {{ }} アイコンをクリックしてExpressionモードに切り替える
3. 以下の式を入力する
`
{{ JSON.parse($json.your_field_name) }}
`
your_field_name は実際のフィールド名に変えてください。この式が特に役立つのは次のようなケースです。
| ケース | 例 |
|---|---|
| WebhookのボディがPlainテキストで届いた | {{ JSON.parse($json.body) }} |
| Googleスプレッドシートのセルにまとめて保存したJSON文字列 | {{ JSON.parse($json.raw_data) }} |
| Slackのメッセージにシリアライズして埋め込んだJSONテキスト | {{ JSON.parse($json.text) }} |
これで、文字列扱いされていたデータが、n8nが扱える「オブジェクト(構造化データ)」に生まれ変わります。
[関連テクニック] エラーを未然に防ぐ「検証」ツール
「どこが間違っているのか目で見てわからない!」という場合は、人間の目で探すのを諦めて、無料の検証ツールを使いましょう。
- JSONLint (jsonlint.com): エラーが出ているJSONテキストをコピーして貼り付けるだけで、「何行目のどこがおかしいか」をピンポイントで指摘し、正しい形に整形してくれます。
よくある質問 (QA)
Q1. 「Unexpected token」というエラーが出ます。どう読み解けばいいですか?
A: 「Unexpected token」は「想定外の文字が見つかった」という意味です。その後ろに続く文字がヒントになります。
- Unexpected token U
→undefined(未定義)な値を渡している可能性 - Unexpected token <
→ HTMLのエラーページが返ってきている可能性 - Unexpected token ‘
→ シングルクォートを使っている可能性(Pattern B参照)
Q2. JSONLintで「Valid JSON」と出るのにn8nでエラーになります。
A: 空白や改行コードの違い、BOM(バイト順マーク)が原因の場合があります。Codeノードで inputContent.trim() を挟んでから JSON.parse()` を試してください。また、データを渡しているノードのプロパティ名が正しいか(大文字小文字含め)も確認してみてください。
Q3. OpenAIノードの出力が毎回形式が違ってエラーになります。
A: LLMの出力は本質的に不安定です。対策は2つあります。①プロンプトに「必ずJSONのみを返してください。前後に説明文を入れないでください。」と明記する。②Pattern Aのクリーニングコードを毎回適用する(冗長に見えても入れておくのが安全です)。私の案件でも、この2つを組み合わせることでJSON形式エラーはほぼゼロになっています。
—
この記事の内容に関する開発・自動化のご依頼はお気軽にご相談ください。
累計200件以上の受注実績・残念評価ゼロ。


コメント