2017-11-29 16 views
1

私はAppScriptを習得しようとしており、Googleスプレッドシートを例として使用しています。私は単純なJSONオブジェクトを作成したいと思います。GoogleスプレッドシートからJSONオブジェクトを作成する

表の例

 
Name ID Price Qty 
ABC  123 100  1 
DEF  342 56  2 
HIJ  233 90  3 
IJK  213 68  5 

私は、このYouTubeのチュートリアル以下で開始

[ 
    { 
    "Name": "ABC", 
    "ID": "123", 
    "Price": 100, 
    "Qty": 1 
    }, 
    { 
    "Name": "DEF", 
    "ID": "342", 
    "Price": 56, 
    "Qty": 2 
    }, 
    { 
    "Name": "HIJ", 
    "ID": "233", 
    "Price": 90, 
    "Qty": 3 
    }, 
    { 
    "Name": "IJK", 
    "ID": "213", 
    "Price": 68, 
    "Qty": 5 
    } 
] 

のようなものにするためにJSONを出したい:https://www.youtube.com/watch?v=TQzPIVJf6-wを。しかし、ビデオは各列ヘッダーをオブジェクトとして作成することについて話しています。どこで列名をkey、行値をvalueにするかを指定します。ここで

は私の現在のAppScriptコード

function doGet() { 
    var result={}; 
    var rewards = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1') 
    .getDataRange() 
    .getValues(); 

    result.rewardObj = makeObject(rewards); 
    //Logger.log(result.rewardObj); 
    return ContentService.createTextOutput(JSON.stringify(result)) 
    .setMimeType(ContentService.MimeType.JSON) 


} 

function makeObject(multiArray) 
{ 
    var obj = {}; 
    var colNames = multiArray.shift(); 
    var rowNames = multiArray.slice(0,1); 
    var rowCount = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1').getLastRow(); 
    var colCount = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1').getLastColumn(); 

    for(var j=0;j<4;j++) 
    { 
    for(var i=0;i<4;i++) 
     { 
     //obj[colNames] = rowNames.map(function(item){return item[i];}); 
     obj[colNames[j][i]] = multiArray[j][i]; 
     } 
    } 
    Logger.log(rowCount) 
    Logger.log(colCount) 
    Logger.log(multiArray[57][12]); 
    return obj; 
} 

出力され、単一のオブジェクト

{"rewardObj":{"Name":"ABC","ID":"123","Price":"100","Qty":"1"}} 

PSです:私はプログラマではないよ、私はちょうどhackey方法でいくつかのスクリプトを学んでいます。基本を知らないために謝罪:)

答えて

5

てみてください:

function getJsonArrayFromData(data) 
{ 

    var obj = {}; 
    var result = []; 
    var headers = data[0]; 
    var cols = headers.length; 
    var row = []; 

    for (var i = 1, l = data.length; i < l; i++) 
    { 
    // get a row to fill the object 
    row = data[i]; 
    // clear object 
    obj = {}; 
    for (var col = 0; col < cols; col++) 
    { 
     // fill object with new values 
     obj[headers[col]] = row[col];  
    } 
    // add object in a final result 
    result.push(obj); 
    } 

    return result; 

} 

テスト機能:

function test_getJsonArrayFromData() 
{ 
    var data = 
    [ 
     ['Planet', 'Mainland', 'Country', 'City'], 
     ['Earth', 'Europe', 'Britain', 'London'], 
     ['Earth', 'Europe', 'Britain', 'Manchester'], 
     ['Earth', 'Europe', 'Britain', 'Liverpool'], 
     ['Earth', 'Europe', 'France', 'Paris'], 
     ['Earth', 'Europe', 'France', 'Lion'] 
    ]; 

    Logger.log(getJsonArrayFromData(data)); 

    // => [{Mainland=Europe, Country=Britain, Planet=Earth, City=London}, {Mainland=Europe, Country=Britain, Planet=Earth, City=Manchester}, {Mainland=Europe, Country=Britain, Planet=Earth, City=Liverpool}, {Mainland=Europe, Country=France, Planet=Earth, City=Paris}, {Mainland=Europe, Country=France, Planet=Earth, City=Lion}] 

} 
+0

うわー美しく働きました。どうもありがとうございました。私はコードが何をしているのかを理解するために勉強しています。いくつかのコメントを追加できる場合、それは非常に役立つでしょう。私がやっていた主な間違いは、配列の代わりにオブジェクト 'obj'を返すことだったと思いますか? – maverick340

+0

具体的には、このコード行は何を意味するのかを説明できますか? obj [ヘッダー[col]] =行[col]; – maverick340

+2

@ maverick340最初の行(列のヘッダー)から値を取り出し、それをキーとして設定しています。次に、あなたがいる行の値を取得し、値として設定します。希望が助けてくれる! –

関連する問題