如何将几个 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。

解决方案:

  • Shift二维数组得到headers

  • Map数组到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 帐户,这将不会工作太久