I am trying to learn AppScript and I am using Google Sheets as an example. I want to create a simple JSON object using some data populated in the Sheet.
Table Example
Name ID Price Qty ABC 123 100 1 DEF 342 56 2 HIJ 233 90 3 IJK 213 68 5
I want the JSON out to be something like
JavaScript
x
27
27
1
[
2
{
3
"Name": "ABC",
4
"ID": "123",
5
"Price": 100,
6
"Qty": 1
7
},
8
{
9
"Name": "DEF",
10
"ID": "342",
11
"Price": 56,
12
"Qty": 2
13
},
14
{
15
"Name": "HIJ",
16
"ID": "233",
17
"Price": 90,
18
"Qty": 3
19
},
20
{
21
"Name": "IJK",
22
"ID": "213",
23
"Price": 68,
24
"Qty": 5
25
}
26
]
27
I started by following this Youtube tutorial : https://www.youtube.com/watch?v=TQzPIVJf6-w. However that video talks about creating each column header as a the object. Where as i want the Column name to be the key
and the Row value to be the value
.
Here is my current AppScript Code
JavaScript
1
36
36
1
function doGet() {
2
var result={};
3
var rewards = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1')
4
.getDataRange()
5
.getValues();
6
7
result.rewardObj = makeObject(rewards);
8
//Logger.log(result.rewardObj);
9
return ContentService.createTextOutput(JSON.stringify(result))
10
.setMimeType(ContentService.MimeType.JSON)
11
12
13
}
14
15
function makeObject(multiArray)
16
{
17
var obj = {};
18
var colNames = multiArray.shift();
19
var rowNames = multiArray.slice(0,1);
20
var rowCount = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1').getLastRow();
21
var colCount = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1').getLastColumn();
22
23
for(var j=0;j<4;j++)
24
{
25
for(var i=0;i<4;i++)
26
{
27
//obj[colNames] = rowNames.map(function(item){return item[i];});
28
obj[colNames[j][i]] = multiArray[j][i];
29
}
30
}
31
Logger.log(rowCount)
32
Logger.log(colCount)
33
Logger.log(multiArray[57][12]);
34
return obj;
35
}
36
The output is a single object
JavaScript
1
2
1
{"rewardObj":{"Name":"ABC","ID":"123","Price":"100","Qty":"1"}}
2
PS: I am not a programmer, I am just learning some scripting in a hackey way. Apologies for not knowing the basics 🙂
Advertisement
Answer
Please try:
JavaScript
1
28
28
1
function getJsonArrayFromData(data)
2
{
3
4
var obj = {};
5
var result = [];
6
var headers = data[0];
7
var cols = headers.length;
8
var row = [];
9
10
for (var i = 1, l = data.length; i < l; i++)
11
{
12
// get a row to fill the object
13
row = data[i];
14
// clear object
15
obj = {};
16
for (var col = 0; col < cols; col++)
17
{
18
// fill object with new values
19
obj[headers[col]] = row[col];
20
}
21
// add object in a final result
22
result.push(obj);
23
}
24
25
return result;
26
27
}
28
Test function:
JavaScript
1
18
18
1
function test_getJsonArrayFromData()
2
{
3
var data =
4
[
5
['Planet', 'Mainland', 'Country', 'City'],
6
['Earth', 'Europe', 'Britain', 'London'],
7
['Earth', 'Europe', 'Britain', 'Manchester'],
8
['Earth', 'Europe', 'Britain', 'Liverpool'],
9
['Earth', 'Europe', 'France', 'Paris'],
10
['Earth', 'Europe', 'France', 'Lion']
11
];
12
13
Logger.log(getJsonArrayFromData(data));
14
15
// => [{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}]
16
17
}
18