😸

ChatGPTにデータシートを元にして構造化されたJSONを生成するプログラムを組んで欲しい

2023/03/13に公開

データシートを元にして構造化された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からの返却を以下に登録した。

https://jsfiddle.net/Yakinik/w4m9yb6q/

変換用サンプルデータ: tracks.xlsx

サンプルデータで動作を確認したところ、想定した動きになっている。

細かな見落とし

よく見ると、 "date", "bpm" の値が暗黙的に数値になっている。
事項でのトピックにも関わるため、いったん提示しておく。

GitHubで編集を提案

Discussion