n8nの式を直すときは、項目名より先に「一件のitemのどこに値があるか」を確認します。JSONの配列、入れ子の項目、文字列の数値を同じように読むと、値が見えているのに計算できない状態になります。
itemの集合と、一件の中の配列を分ける
n8nのノード間では複数のitemを渡せます。一件のitemのJSON内に、さらに複数の商品などの配列が入る場合もあります。「itemが三件ある」と「一件の中に商品が三つある」は、後続の動きが違います。
{
"order_id": "demo-100",
"customer": { "name": "サンプル担当" },
"items": [
{ "name": "ノート", "quantity": 2 },
{ "name": "ペン", "quantity": 1 }
],
"total": "1200"
}
この架空の注文は一件ですが、商品は二つです。商品ごとに行を作る場合には、その配列をitemへ分ける工程が必要になります。最初から商品ごとに入力が分かれている構成へ、さらに分割を加えないようにします。
$jsonから、必要な深さの値を読む
現在のitemを読むExpressionなら、担当名は$json.customer.name、先頭の商品名は$json.items[0].nameです。配列の添字は0から始まります。空配列やcustomerがない入力も受けるなら、直接参照する前に存在を確認します。
{{ $json.customer?.name ?? '担当未設定' }}
これは値が存在しない場合の表示用の例です。担当未設定でも処理してよいのかは別に判断します。送金や通知の宛先に必要な値なら、代替文字列で先へ進めず確認待ちにします。
空文字と0円を、同じ未入力にしない
"1200"は文字列、1200は数値です。計算前に型を揃えますが、空文字を単純に数値へ変換すると0になる場合があります。0円が正しい注文と、金額が届いていない注文を区別してください。
| 入力 | 先に決める扱い |
|---|---|
| 1200 | 数値として使えるか、単位と範囲を確認 |
| “1200” | 数値へ変換し、変換後の有限値を確認 |
| 0 | 0が許される業務か確認 |
| “” / null / 項目なし | 未入力として止めるか、明示した既定値を使う |
OUTPUTの実際の形を、式を書く前に読む
前のノードを実行してOUTPUTを開き、JSON表示で入れ子と型を見ます。表表示で同じ列に見える値でも、JSONでは構造が違う場合があります。詳しい仕組みはn8nのデータ構造で確認できます。
同じ式を、通常入力・項目なし・空配列の三件へ当てて確認します。分岐条件へ進む前に、読める値と止める値の境界を決めることが、後ろのIFや更新処理を安定させます。