2017-11-29 1 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 

나는이 유튜브 튜토리얼에 따라 시작 뭔가

[ 
    { 
    "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 [headers [col]] = 행 [col]; – maverick340

+2

@ maverick340 첫 번째 행 (열의 머리글)에서 값을 가져 와서 키로 설정합니다. 그런 다음 현재 행에있는 값을 가져 와서 값으로 설정합니다. 희망이 도움이됩니다! –

관련 문제