ExcelやCSVの表を、APIへの登録やシステムへの取り込み用に決められた形式のJSONへ変換したいとき、表の列名をそのままキーにする変換では形が合わないことがよくあります。JSON生成ツールを使うと、列ごとに「JSONのどこに入れるか」と「数値・真偽値などの型」を決めるだけで、入れ子や配列を含むJSONをプログラムなしで作れます。この記事では、商品とSKU(色・サイズ別の在庫)の2つのシートがあるExcelファイルを例に、実際の画面で手順を説明します。
表をそのままJSONにしても形が合わない理由
一般的なCSV → JSONの変換では、1行が1つのオブジェクトになり、列名がそのままキーになります。この記事の例の表を変換すると、次のようになります。
[
{
"商品コード": "0101",
"商品名": "ドライTシャツ",
"価格": "1980",
"タグ1": "新商品",
"タグ2": "セール",
"公開": "はい"
}
]一方、APIの仕様書などで指定されるJSONは、たいてい次のような点で表と形が違います。
- キーの名前が違う:表は「商品名」、JSONは
nameのように英語のキーを使う。 - 入れ子になっている:価格を
"price": {"amount": 1980}のようにオブジェクトの中に入れる。 - 配列になっている:表では「タグ1」「タグ2」と横に並んだ列を、
"tags": ["新商品", "セール"]のような配列にする。 - 別の表の行が中に入る:別シートのSKUを、商品ごとに
variantsの配列として入れる。 - 型が決まっている:価格は数値の
1980、公開はtrue/falseにする。表の値はすべて文字として扱われるため、変換が必要。 - 表にない値がある:通貨
"JPY"や表示順の番号、全体のversionなど。
JSON生成ツールでは、これらを項目ごとの設定で指定できます。
この記事の例:元の表と作りたいJSON
Excelファイルに「商品」と「SKU」の2つのシートがあります。商品コードの「0101」は先頭の0を残すため、Excelでは文字列として入力しています。
シート「商品」
| 商品コード | 商品名 | 価格 | タグ1 | タグ2 | 公開 |
|---|---|---|---|---|---|
| 0101 | ドライTシャツ | 1,980 | 新商品 | セール | はい |
| 0102 | リネンシャツ | 4,500 | 新商品 | はい | |
| 0103 | デニムパンツ | 6,800 | 定番 | いいえ |
シート「SKU」
| 商品コード | SKU | 色 | サイズ | 在庫数 |
|---|---|---|---|---|
| 0101 | 0101-WH-M | ホワイト | M | 12 |
| 0101 | 0101-WH-L | ホワイト | L | 0 |
| 0101 | 0101-BK-M | ブラック | M | 5 |
| 0102 | 0102-BE-M | ベージュ | M | 3 |
| 0103 | 0103-ID-30 | インディゴ | 30 | 8 |
作りたいJSONは次の形です。products の中に3つの商品が同じ形で並びます(ここでは1件目だけを示しています)。
{
"version": 1,
"products": [
{
"id": "0101",
"name": "ドライTシャツ",
"price": {
"amount": 1980,
"currency": "JPY"
},
"tags": [
"新商品",
"セール"
],
"published": true,
"sortOrder": 1,
"variants": [
{
"sku": "0101-WH-M",
"color": "ホワイト",
"size": "M",
"stock": 12
},
{
"sku": "0101-WH-L",
"color": "ホワイト",
"size": "L",
"stock": 0
},
{
"sku": "0101-BK-M",
"color": "ブラック",
"size": "M",
"stock": 5
}
]
}
]
}列とJSONの位置の対応をまとめると、次のようになります。
同じ操作を試したい場合は、サンプルファイルをダウンロードして使えます。データはすべて架空のものです。
- サンプルのExcelファイル(products-sku.xlsx)
- CSVで試す場合:products.csv(商品)と skus.csv(SKU)
手順1:Excelファイルを読み込む
JSON生成ツールを開き、「1 データ(表)」の[CSV・Excelファイルを選択]からExcelファイルを選びます。シートが複数あるため、使うシートを選ぶ画面が表示されます。「商品」と「SKU」の両方にチェックが入っていることを確認して、[選んだシートを表として追加]を押します。

2つのシートが表として追加され、最初のシート「商品」の列をそのまま項目にしたブロックが「2 JSONの組み立て」に自動で作られます。「ブロック」は、1つの表から作るJSONの一部のことです。読み込んだ表は画面上で確認・編集できます。
手順2:全体の形(テンプレート)と配置先を決める
まず、JSONの一番外側の形を「全体のJSON(テンプレート)」に書きます。version のように表と関係のない固定の値もここに書きます。
{
"version": 1,
"products": []
}テンプレートを書いた時点では、次のメッセージが表示されます。自動で作られたブロックの「配置先」が空欄で、ブロックがJSON全体になる設定のままだからです。

ブロック「商品」の「配置先」に products と入力します。これで、商品の配列がテンプレートの "products": [] の場所に入ります。形は「オブジェクトの配列(1行=1件)」のままにします。

products を入力したところ。画像を選ぶと拡大できます。テンプレートに "products": [] と書かなくても、配置先の場所は自動で作られます。テンプレートに書いておくと、完成形が分かりやすくなります。
手順3:列ごとにJSONの位置と型を決める
ブロック「商品」には、表の列がそのまま項目として並んでいます。各項目の「JSON上の位置」を書き換え、「型」と「空欄のとき」を次の表のとおりに設定します。
| 値(表の列) | JSON上の位置 | 型 | 空欄のとき |
|---|---|---|---|
| 商品コード | id | 文字列 | "" にする(初期設定) |
| 商品名 | name | 文字列 | "" にする |
| 価格 | price.amount | 数値 | "" にする |
| タグ1 | tags[0] | 文字列 | 出力しない |
| タグ2 | tags[1] | 文字列 | 出力しない |
| 公開 | published | 真偽値 | "" にする |
![ブロック「商品」の項目一覧。idは商品コード・文字列、nameは商品名・文字列、price.amountは価格・数値、price.currencyは固定値JPY、tags[0]とtags[1]はタグ1とタグ2で空欄のとき出力しない、publishedは公開・真偽値になっている](/images/guides/excel-csv-to-json/field-mapping.png)
price.currency は手順4で追加する固定値の項目です。画像を選ぶと拡大できます。位置の書き方
price.amountのように「.」で区切ると、priceオブジェクトの中にamountが入ります。tags[0]の[0]は配列の1番目、[1]は2番目です。横に並んだ列を1つの配列にまとめられます。
型と空欄の考え方
- 商品コードは「文字列」のままにします。「数値」にすると、
"0101"が101になってしまいます。 - 価格は「数値」にすると、
"1980"ではなく1980として出力されます。Excelで「1,980」と表示されていても、ファイルには1980として保存されているため、そのまま数値になります。 - 公開は「真偽値」にすると、「はい」が
true、「いいえ」がfalseになります。true/false、1/0、yes/no も変換できます。 - タグは空欄のとき「出力しない」にします。リネンシャツはタグ2が空欄のため、
["新商品", ""]ではなく["新商品"]になります。
手順4:表にない値(固定値・連番)を追加する
通貨の "JPY" のように、すべての商品で同じ値は「固定値」で追加します。ブロック「商品」の[+ 項目を追加]を押し、追加された項目の「JSON上の位置」に price.currency、「値」で「固定値」を選んで JPY と入力します。↑のボタンで price.amount の下に移動すると、JSONでもその順番になります。
表示順の番号 sortOrder は「連番」で作ります。もう一度[+ 項目を追加]を押し、位置に sortOrder、「値」で「連番」を選びます。開始1・増分1のままなら、1, 2, 3 と番号が付き、型は自動で「数値」になります。

sortOrder と、手順5で設定する variants の項目。画像を選ぶと拡大できます。連番の「先頭の文字」と「桁数(0埋め)」を使うと、ITEM-001 のようなIDも作れます。作成日時などは「日時の連続」、重複しないIDは「UUID(一意のID)」で追加できます。
手順5:別シートのSKUを入れ子にする(子ブロック)
SKUのように、1つの商品に複数の行がある別の表は「子ブロック」にして、商品の中に入れます。
- 「1 データ(表)」で「SKU」のタブを選んでから、[+ ブロックを追加]を押します。表「SKU」の列を項目にしたブロックが追加されます。
- 追加したブロック「SKU」の「配置先」で「子ブロックとして別のブロックに入れる」を選びます。
- 商品コードは商品側にあるため、ブロック「SKU」の「商品コード」の項目は×で削除します。残りの項目の位置を
sku・color・size・stockに変え、在庫数の型を「数値」にします。サイズの「30」は文字として扱いたいため、「文字列」のままにします。 - ブロック「商品」に戻って[+ 項目を追加]を押し、位置に
variants、「値」で「SKUを入れる」を選びます。 - 「この表(商品)の列」と「子の表(SKU)の列」で、両方とも「商品コード」が選ばれていることを確認します。同じ名前の列は自動で選ばれます。

これで、商品コードが同じSKUの行だけが、各商品の variants に配列として入ります。SKUが1つもない商品は "variants": [] になります。
手順6:プレビューで確認してJSONを生成する
「3 出力」のプレビューに、設定どおりのJSONが表示されます。プレビューは各ブロックの先頭3件だけを使って表示します。形を確認したら[JSONを生成]を押し、ファイル名を入力して[ダウンロード]を押します。[コピー]でクリップボードにコピーすることもできます。

2件目のリネンシャツは、タグが1つだけ、SKUが1つだけのJSONになります。
{
"id": "0102",
"name": "リネンシャツ",
"price": {
"amount": 4500,
"currency": "JPY"
},
"tags": [
"新商品"
],
"published": true,
"sortOrder": 2,
"variants": [
{
"sku": "0102-BE-M",
"color": "ベージュ",
"size": "M",
"stock": 3
}
]
}データを更新して作り直すとき
ブロックやテンプレートの設定はブラウザに保存されます。商品が増えたときなどは、更新したExcelファイルを同じように読み込みます。同じ名前の表(シート)がすでにあるため、内容を置き換えるかを確認するメッセージが表示されます。[OK]を選ぶと表の中身だけが新しくなり、ブロックの設定はそのまま使えるので、[JSONを生成]を押すだけで作り直せます。
表の列は名前で対応させます。列名を変えたり列を削除したりした場合は、その列を使っていた項目がエラーになるため、項目の「値」で列を選び直してください。
うまくいかないときの確認ポイント
設定に問題があると、プレビューの下に「次の点を修正してください」と表示され、JSONは生成されません。よくあるメッセージと直し方です。
| 表示されるメッセージ(例) | 原因 | 直し方 |
|---|---|---|
| ブロック「商品」は配置先が空欄のため、JSON全体になります。… | テンプレートに値があるのに、ブロックの配置先が空欄 | 配置先に products などの位置を入力する |
| 表「商品」の2行目、ブロック「商品」の項目「price.amount」:「4,500円」は数値に変換できません。 | 数値にしたい列に「円」などの文字が入っている | Excelで単位を消して数字だけにする。単位付きのまま出力したい場合は型を「文字列」にする |
| ブロック「商品」で、「price」と「price.amount」の位置が重なっています(値の中に別の項目を入れることはできません)。 | price に値を入れつつ、その中に amount も入れようとしている | どちらかの位置を変える(例:price を price.amount にする) |
| ブロック「商品」で、項目「name」が重複しています。 | 同じ位置の項目が2つある | 片方の位置を変えるか、不要な項目を削除する |
エラーにならないのに結果が期待と違う場合は、次も確認してください。
variantsが空の配列になる:関連付けに使う列の値が一致していません。商品の表は「0101」、SKUの表は「101」のように、先頭の0が片方だけ消えていないか確認します。前後の空白は無視して比べます。- 商品コードの先頭の0が消えている:Excelで数値として入力されていると、ファイルにも101として保存されています。Excelでセルの書式を「文字列」にして入力し直してください。
- キーの順番が仕様書と違う:項目の↑↓で並べ替えると、JSONのキーもその順番になります。
元の表がCSVの場合
CSVの場合も手順は同じです。シートの代わりに、商品とSKUを別々のCSVファイルにしておき、[CSV・Excelファイルを選択]で2つのファイルをまとめて選びます。表の名前はファイル名(例:products、skus)になり、子ブロックの値は「skusを入れる」のように表示されます。表の名前は「表の名前」の欄で変更できます。
Excelで保存したShift_JISのCSVも、文字コードを自動で判定して読み込みます。区切り文字がカンマ以外(タブやセミコロン)でも自動で判定します。
作ったJSONを確認する
生成したJSONは、取り込み先の仕様と照らし合わせて確認しておくと安心です。構文や重複キー、階層の深さはJSON 総合診断で、見た目の整形や圧縮はJSON 整形で確認できます。取り込みでエラーになる場合は、JSONをインポートできない原因も参考にしてください。
列名をそのままキーにするだけで十分な場合は、より手軽なCSV → JSONツールも使えます。