やりたいこと
Google apps scriptにてスプレッドシートに書かれた内容を任意の形式でJSONにしたいです。
スプレドシートの内容はこんな感じです。
|region|pref|shop_type|shop_name|shop_address|
|:--|:--:|
|関東|東京都|健康食品|ショップA|ショップAについて|
|関東|東京都|生鮮食品|ショップB|ショップBについて|
|東北|青森県|お菓子|ショップC|ショップCについて|
|東北|青森県|ギフト|ショップD|ショップDについて|
やりたいJSON形式は次ようにネストにしたいです。
JSON
1[ 2 { 3 "region": "関東", 4 "pref": "東京都", 5 "detail": [ 6 { 7 "store_detail": [ 8 { "shop_type": "健康食品" }, 9 { "shop_name": "ショップA" }, 10 { "shop_address": "ショップAについて" } 11 ] 12 }, 13 { 14 "store_detail": [ 15 { "shop_type": "生鮮食品" }, 16 { "shop_name": "ショップB" }, 17 { "shop_address": "ショップBについて" } 18 ] 19 } 20 ] 21 }, 22 { 23 "region": "東北", 24 "pref": "青森県", 25 "detail": [ 26 { 27 "store_detail": [ 28 { "shop_type": "お菓子" }, 29 { "shop_name": "ショップC" }, 30 { "shop_address": "ショップCについて" } 31 ] 32 }, 33 { 34 "store_detail": [ 35 { "shop_type": "ギフト" }, 36 { "shop_name": "ショップD" }, 37 { "shop_address": "ショップDについて" } 38 ] 39 } 40 ] 41 } 42]
現状
配列の内容をいろいろ変えてみたりしたのですが、どうもうまくいきませんでした。
exceptIndexArrayに連想配列を入れるのは間違いでしょうか。
アドバイスや方法等、わかる方がいらっしゃればご教授いただけますと幸いです。
現在のGASのコードです。
GAS
1function doGet() { 2 //スプレットシート(account)の情報を取得 3 var sheet = SpreadsheetApp.getActive().getSheetByName('sheet1'); 4 //dataへ変換 5 var dataArray = convSheet(sheet); 6 7 //dataをJsonに変換し、新規シート出力 8 creatNewSheet(dataArray); 9 } 10 11//data(配列)へ変換関数 12 function convSheet(sheet) { 13 //内容開始行番号 14 var rowIndex=2; 15 //列開始行番号 16 var colStartIndex = 1; 17 //行番号 18 var rowNum = 1; 19 //最初行領域 20 var firstRange = sheet.getRange(1, 1, 1, sheet.getLastColumn()); 21 //Logger.log('firstRange:'+JSON.stringify(firstRange)); 22 var firstRowValues = firstRange.getValues(); 23 //Logger.log('firstRowValues:'+JSON.stringify(firstRowValues)); 24 //項目情報取得 25 var titleColumns = firstRowValues[0]; 26 27 var iregion = titleColumns.indexOf('region'); 28 var ipref = titleColumns.indexOf('pref'); 29 var ishoptype = titleColumns.indexOf('shop_type'); 30 var ishopname = titleColumns.indexOf('shop_name'); 31 var ishopadd = titleColumns.indexOf('shop_address'); 32 //Logger.log('indexName: '+indexName+' '+'indexDepCd: '+indexDepCd+' '+'indexDepNm: '+indexDepNm+' ' 33 // +'indexTeamCd: '+indexTeamCd+' '+'indexTeamNm: '+indexTeamNm); 34 var exceptIndexArray =[{'detail':[{'store':[{'content': 'hoge'}]}],'iregion':iregion,'pref':ipref,'shop_type':ishoptype,'shop_name':ishopname,'shop_address':ishopadd }]; 35 //Logger.log('exceptIndexArray: '+exceptIndexArray); 36 37 //最後の行番号 38 var lastRow = sheet.getLastRow(); 39 //Logger.log('lastRow:'+JSON.stringify(lastRow)); 40 //内容情報取得配列 41 var rowValues = []; 42 //内容取得 43 for(rowIndex; rowIndex<=lastRow; rowIndex++) { 44 var range = sheet.getRange(rowIndex, colStartIndex, rowNum, sheet.getLastColumn()); 45 var values = range.getValues(); 46 //内容情報にPUSH 47 rowValues.push(values[0]); 48 } 49 //Logger.log('rowValues:'+JSON.stringify(rowValues)); 50 51 //Json形式配列 52 var dataArray = []; 53 for(var i=0; i<rowValues.length; i++) { 54 //内容の行情報 55 var line = rowValues[i]; 56 //JsonObject 57 var json = new Object(); 58 //初期Json 59 var firstJson = new Object(); 60 61 json[line[iregion]] = firstJson; 62 63 //残りJson作成 64 for(var j=0; j<titleColumns.length; j++) { 65 //最初Json除外 66 if(0>exceptIndexArray.indexOf(j)){ 67 json[titleColumns[j]] = line[j]; 68 } 69 } 70 //data格納 71 dataArray.push(json); 72 } 73 //「dataArray」ログ確認 74 Logger.log(exceptIndexArray); 75 return dataArray; 76 } 77 78function creatNewSheet(dataArray){ 79 //data(配列)よりJsonへ変換 80 var json = JSON.stringify(dataArray); 81 82 //出力 83 //msgBox出力 84 //Browser.msgBox(json); 85 86 //新規シート名(日付) 87 var date = new Date(); 88 var newSheetName = date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + date.getDate(); 89 //新規シート初期化 90 var newSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(newSheetName); 91 92 //存在有無確認 93 //存在しない場合 94 if(!newSheet){ 95 //シート生成 96 newSheet = SpreadsheetApp.getActiveSpreadsheet(); 97 newSheet.insertSheet(newSheetName); 98 //データ入力 99 newSheet.getRange("A1").setValue(json); 100 //存在する場合 101 }else{ 102 //データの書換え 103 newSheet.getRange("A1").setValue(json); 104 } 105 }
回答2件
あなたの回答
tips
プレビュー