如何将几个 Google 表格列转换为 JSON 字符串?
How do I convert a couple of Google Sheets columns into a JSON string?
我正在编写一段代码,将两列 (A, B) 转换为具有 JSON 格式的 key/value 对。我不知道如何让它工作。我目前有一个函数可以读取顶行(键)和值的底行,但我无法让它显示中间的行。我不是工程师或开发人员,但我确实喜欢编码。
sheet 看起来像这样:
+-------+-------------+
| A | B |
+-------+-------------+
| code | description |
+-------+-------------+
| brand | microsoft |
+-------+-------------+
| size | large |
+-------+-------------+
| color | green |
+-------+-------------+
我希望得到这样的 JSON 字符串:
[{"code":"brand","description":"microsoft"}, {"code":"color","description":"green"}, {"code":"size","description":"large"}]
到目前为止,我的 Google Apps 脚本代码如下所示:
function tableJSON(arr) {
var i, j, obj = {};
for (j = 0; j < arr[0].length; j++) {
obj[arr[0][j]] = {};
}
for (i = 0; i < arr.length; i++) {
for (j = 0; j < arr[0].length; j++) {
obj[arr[0][j]] = arr[i][j];
}
}
return JSON.stringify(obj);
}
我输入
="[" & tableJSON(A1:B4) & "]"
的结果是:
[{"code":"size","description":"large"}]
我确定解决方案很简单,但我一直无法弄清楚。
问题:
代码每次迭代只创建 1 个 object 并重写相同的 object。
解决方案:
/*<ignore>*/console.config({maximize:true,timeStamps:false,autoScroll:false});/*</ignore>*/
/**
* @param{Array<Array>} arr 2D array
* @customfunction
* @OnlyCurrentDoc
*/
function tableJSONFixed(arr) {
'use strict';
const [code, desc] = arr.shift();
return JSON.stringify(arr.map(([v1, v2]) => ({ [code]: v1, [desc]: v2 })));
}
console.info(
tableJSONFixed([
['code', 'description'],
['brand', 'google'],
['size', 'large'],
['color', 'green'],
])
);
<!-- https://meta.whosebug.com/a/375985/ --> <script src="https://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
https://github.com/jsoma/tabletop
我正在使用桌面将工作表转换为 JSON,但如果您有一个组织 google 帐户,这将不会工作太久
我正在编写一段代码,将两列 (A, B) 转换为具有 JSON 格式的 key/value 对。我不知道如何让它工作。我目前有一个函数可以读取顶行(键)和值的底行,但我无法让它显示中间的行。我不是工程师或开发人员,但我确实喜欢编码。
sheet 看起来像这样:
+-------+-------------+ | A | B | +-------+-------------+ | code | description | +-------+-------------+ | brand | microsoft | +-------+-------------+ | size | large | +-------+-------------+ | color | green | +-------+-------------+
我希望得到这样的 JSON 字符串:
[{"code":"brand","description":"microsoft"}, {"code":"color","description":"green"}, {"code":"size","description":"large"}]
到目前为止,我的 Google Apps 脚本代码如下所示:
function tableJSON(arr) {
var i, j, obj = {};
for (j = 0; j < arr[0].length; j++) {
obj[arr[0][j]] = {};
}
for (i = 0; i < arr.length; i++) {
for (j = 0; j < arr[0].length; j++) {
obj[arr[0][j]] = arr[i][j];
}
}
return JSON.stringify(obj);
}
我输入
="[" & tableJSON(A1:B4) & "]"的结果是:
[{"code":"size","description":"large"}]
我确定解决方案很简单,但我一直无法弄清楚。
问题:
代码每次迭代只创建 1 个 object 并重写相同的 object。
解决方案:
/*<ignore>*/console.config({maximize:true,timeStamps:false,autoScroll:false});/*</ignore>*/
/**
* @param{Array<Array>} arr 2D array
* @customfunction
* @OnlyCurrentDoc
*/
function tableJSONFixed(arr) {
'use strict';
const [code, desc] = arr.shift();
return JSON.stringify(arr.map(([v1, v2]) => ({ [code]: v1, [desc]: v2 })));
}
console.info(
tableJSONFixed([
['code', 'description'],
['brand', 'google'],
['size', 'large'],
['color', 'green'],
])
);
<!-- https://meta.whosebug.com/a/375985/ --> <script src="https://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
https://github.com/jsoma/tabletop
我正在使用桌面将工作表转换为 JSON,但如果您有一个组织 google 帐户,这将不会工作太久