json - 在 Google 表格中解析 JSON

标签 json google-apps-script google-sheets google-sheets-formula

我是第一次使用 JSON,所以请原谅我缺乏知识。

我正在尝试使用 JSON 文件在 Google 表格中填充数据。我只是不知道正确的语法。如何格式化 JSON 函数以正确访问数据并停止返回错误?

我正在尝试从这里提取数据:

https://eddb.io/archive/v6/bodies_recently.jsonl

进入 Google 表格。

我已经加载了 ImportJSON 脚本,并且我已经用一个非常小的 JSON 文件 ( http://date.jsontest.com/ ) 对其进行了测试,并且它像宣传的那样工作,使用这个函数:

=ImportJSON("http://date.jsontest.com", "/date")

但是,当我尝试将相同的函数与上面来自 eddb.io 的 JSON 一起使用时,我无法让它工作。

我想做的是将“名称”拉入 A1,然后将一些属性拉入列,如下所示:

name  id  type_name  rotational_period, etc. 

这是我的测试链接: https://docs.google.com/spreadsheets/d/1gCKpLcf-ytbPNcuQIIzxp1RMy7N5K8pD02hCLnL27qQ/edit?usp=sharing

最佳答案

这个解决方法怎么样?

问题原因:

当我看到 https://eddb.io/archive/v6/bodies_recently.jsonl 的 URL 时,我注意到文件的扩展名是 jsonl。所以当我检查从 https://eddb.io/archive/v6/bodies_recently.jsonl 中检索到的值时,发现这些值是 JSON 行。 Dimu Designs's comment已经提到了这一点.我也可以确认官方文件说 bodies_recently.jsonl 是行分隔的 JSON。

解决方法:

不幸的是,ImportJSON 无法直接解析 JSON 行的值。因此需要修改脚本作为解决方法。在您共享的电子表格中,ImportJSON 的脚本作为容器绑定(bind)脚本放置。在这次修改中,我修改了脚本。请修改如下。

来自:

可以在脚本编辑器的第 130 - 135 行看到以下函数。

function ImportJSONAdvanced(url, query, options, includeFunc, transformFunc) {
  var jsondata = UrlFetchApp.fetch(url);
  var object   = JSON.parse(jsondata.getContentText());

  return parseJSONObject_(object, query, options, includeFunc, transformFunc);
}

收件人:

请将上面的函数替换成下面的脚本,并保存脚本。然后,请再次将 =ImportJSON("https://eddb.io/archive/v6/bodies_recently.jsonl", "/id") 放入单元格。

function ImportJSONAdvanced(url, query, options, includeFunc, transformFunc) {
  var jsondata = UrlFetchApp.fetch(url);
  var object = jsondata.getContentText().match(/{[\w\s\S].+}/g).map(function(e) {return JSON.parse(e)}); // Modified

  return parseJSONObject_(object, query, options, includeFunc, transformFunc);
}

结果:

enter image description here

注意事项:

  • 尽管此修改后的脚本适用于 https://eddb.io/archive/v6/bodies_recently.jsonl 中的值,但我不确定此修改后的脚本是否适用于所有 JSON 行值.对此我深表歉意。

引用资料:

如果我误解了您的问题并且这不是您想要的结果,我深表歉意。

关于json - 在 Google 表格中解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56047848/

相关文章:

java - 想要将多个 JSON 对象存储到 jsonArray 并将结果作为单个字符串获取

google-apps-script - getActiveRange() 和 getSelection() 有什么区别?

google-apps-script - Google Sheets - 防止用户通过数据验证粘贴单元格

javascript - 我可以从多个数据源(本例中为多个 GoogleSheets)创建单个 HighCharts 图表吗

javascript - 从 Google 电子表格中的列填充 HTML 下拉菜单

json - fluentd 不解析 JSON 日志文件条目

javascript - 从 js 数组中获取选择选项和值的最佳方法是什么

json - 如何保存 MongoDB 查询并在之后运行它?

google-apps-script - 如何使用 Google Apps Docs Script 将光标移动到文档的开头?

java - 从谷歌电子表格获取 JSON