😸
ChatGPTにデータシートを元にして構造化されたJSONを生成するプログラムを組んで欲しい
データシートを元にして構造化されたJSONを生成したい
要求
ざっくり以下のような事を思いついたものとする。
あ〜、年代別にシートが分かれた楽曲リストのExcelから、年代でディレクトリ分けしたアーティストごとの曲情報JSONを作りたいなー。
要件
要求から要件に分解していく。
Excelデータ構造
Excelのデータ構造は以下を例として、複数シート・複数行存在する。
シート: 1990
アーティスト名 | 曲名 | リリース日 | BPM |
---|---|---|---|
犬 | 遠吠えA | 19940401 | 80 |
犬 | 遠吠えB | 19991215 | 60 |
猫 | アオアオ | 19900833 | 120 |
シート: 2000
アーティスト名 | 曲名 | リリース日 | BPM |
---|---|---|---|
犬 | 遠吠えC | 20040401 | 80 |
猫 | ハーッ | 20010101 | 10 |
猫 | ミ゛ッ | 20091230 | 280 |
鴨 | ピルピル | 20061112 | 145 |
ファイル構造
以下のようなファイル構造に書き出したい。
ファイル構造
├ 1990 ┬ 犬.json
├ └ 猫.json
└ 2000 ┬ 犬.json
├ 猫.json
└ 鴨.json
この構造に加え、シートが複数存在することを明示する。
プロンプト
- "年代" シートは複数存在する
JSONデータ構造
以下のようなデータ構造のJSONに書き出したい。
1990/犬.json
{
"period": "1990",
"artist": "犬",
"trackList": [
{ "name": "遠吠えA", "date": "19940401", "bpm": "80" },
{ "name": "遠吠えB", "date": "19991215", "bpm": "60" }
]
}
2000/鴨.json
{
"period": "2000",
"artist": "鴨",
"trackList": [
{ "name": "ピルピル", "date": "20061112", "bpm": "145" }
]
}
この構造に加え、構造化するための概念を明示する。
プロンプト
- "trackList" には "アーティスト名" が一致する情報をまとめる
細かい要件
- (JSFiddleに渡せて手っ取り早いので)
HTML/JSで、HTMLファイル一つで済ませたい。 - formからファイルを選択したい。
- 変換後の構造をZipでダウンロードしたい。
要件をプロンプトに落とし込む
プロンプトに落とし込むには、データ構造と要件を抽象化する必要がある。
Excelデータ構造
Excelデータ構造は以下のように表現できる
Excelデータ構造
- "年代" シート
- "アーティスト名" 列
- "曲名" 列
- "リリース日" 列
- "BPM" 列
ファイル構造
ファイル構造についてはExcelデータ構造のシート名・列名と紐付けて、以下のように表現できる。
ファイル構造
{年代}/{アーティスト名}.json
JSONデータ構造
JSONデータ構造は、前項のExcelデータ構造の列名と紐付けて以下のように表現できる。
JSONデータ構造
{
"period": "年代",
"artist": "アーティスト名",
"trackList": [
{ "name": "曲名", "date": "リリース日", "bpm": "BPM" }
]
}
細かい要件
それぞれプロンプト向けの文言に直す。
プロンプト
- HTML/JSを利用する
- index.html内に変換処理を持つ
- HTML全体のコードがほしい
- formでファイルを選択したい
- Zipでダウンロードしたい
最終的なプロンプト
プロンプト化した要件をまとめると、以下のような表現となる。
最終的なプロンプト
以下の条件でExcelデータからJSONに変換するHTMLファイルがほしい。
Excelデータ構造
```
- "年代" シート
- "アーティスト名" 列
- "曲名" 列
- "リリース日" 列
- "BPM" 列
```
JSONデータ構造
```
{
"period": "年代",
"artist": "アーティスト名",
"trackList": [
{ "name": "曲名", "date": "リリース日", "bpm": "BPM" }
]
}
```
- HTML/JSを利用する
- index.html内に変換処理を持つ
- HTML全体のコードがほしい
- formでファイルを選択したい
- Zipでダウンロードしたい
- "年代" シートは複数存在する
- ファイル構造は {年代}/{アーティスト名}.json
- "trackList" には "アーティスト名" が一致する情報をまとめる
完成
ChatGPTからの返却を以下に登録した。
変換用サンプルデータ: tracks.xlsx
サンプルデータで動作を確認したところ、想定した動きになっている。
細かな見落とし
よく見ると、 "date", "bpm" の値が暗黙的に数値になっている。
事項でのトピックにも関わるため、いったん提示しておく。
Discussion