こんにちは
ゲーム開発を続けているとどこかでマスターデータの量産をしたくなりますよね? ぼくは、スプレットシートにデータを記載して、Jsonとして出力することでゲームにデータとして読み込ませています。
今日は、そのスプレットシートから Json を出力するところを記事にしてみました。
どんなデータ
今回はスプレットシートに以下のように記載したデータを
※ 1行目はJson の要素名を示しています。
※ 2行目は各要素の型を示しています。今回は string が入力されたら、Json として出力する際に 文字列としてダブルクォーテーションをつけて出力します。
以下のようなJsonとして出力したいと思います。
どうやって
Google App Script を使用します。
Google App Script は、スプレットシートやGoogle Drive 上の操作を javascript を用いて行うことができます。
今回はそれを利用して スプレットシート上のデータを Json として出力します。
出力する方法としては、データが記載されているシートでメニューから実行できるようにします。
以下実際にダウンロードするまでの流れの動画です。
コード
以下実際のコードです。
function onOpen() { SpreadsheetApp.getActiveSpreadsheet().addMenu('Menu', [ {name:'ダウンロード', functionName: 'main'} ]) } function main() { // dialog.html をもとにHTMLファイルを生成 // evaluate() は dialog.html 内の GAS を実行するため( <?= => の箇所) var html = HtmlService.createTemplateFromFile("dialog").evaluate(); // 上記HTMLファイルをダイアログ出力 SpreadsheetApp.getUi().showModalDialog(html, "ファイルダウンロード"); } function getData() { // スプレッドシート上の値を二次元配列の形で取得 var sheet = SpreadsheetApp.getActiveSheet(); var values = sheet.getDataRange().getValues(); // ヘッダーの取得 var headerIndex = 0 var headers = [] for(var i = 0; i< values[headerIndex].length; i++ ) { if (!values[headerIndex][i]) { break; } headers.push(values[headerIndex][i]) } console.log(headers) // 型の取得 var typeIndex = 1 var types = [] for(var i = 0; i< values[typeIndex].length; i++ ) { if (!values[typeIndex][i]) { break; } types.push(values[typeIndex][i]) } console.log(types) var dataStateIndex = 2 var dataArray = []; for (var i = dataStateIndex; i < values.length; i++) { dataArray.push(values[i]); } var jsonStr = ""; jsonStr += "{\"InnerArray\":" jsonStr += "[" for (var i = 0; i< dataArray.length; i++) { jsonStr += "{" for (var j = 0; j < dataArray[i].length; j++ ) { var jsonValue = dataArray[i][j] if (types[j] === "string") { jsonValue = "\"" + jsonValue + "\""; } jsonStr += "\"" + headers[j] + "\":" + jsonValue if (j + 1 < dataArray[i].length) { jsonStr += "," } } jsonStr += "}" if (i +1 < dataArray.length) { jsonStr += "," } } jsonStr += "]" jsonStr += "}" return jsonStr }