【问题标题】:Parsing JSON in Google Sheets在 Google 表格中解析 JSON
【发布时间】:2019-05-08 19:33:53
【问题描述】:

我是第一次使用 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

【问题讨论】:

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


【解决方案1】:

这个解决方法怎么样?

问题原因:

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

解决方法:

很遗憾,ImportJSON 无法直接解析 JSON Lines 的值。因此,需要修改脚本作为解决方法。在您共享的电子表格中,ImportJSON 的脚本被放置为容器绑定脚本。在这次修改中,我修改了脚本。请进行如下修改。

发件人:

在您的脚本编辑器的第 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);
}

结果:

注意:

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

参考资料:

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

【讨论】:

    【解决方案2】:

    我没有使用笔记本电脑,但我看到您收到错误 SyntaxError: Expected end of stream at char 2028 (line 132)

    我认为您从 URL 收到的数据太长了。

    【讨论】:

    • 谢谢。 json 也可能格式不正确。我试图把文件放在这个 :jsoneditoronline.org 中,它返回错误。
    • 数据负载为 JSON Lines 格式,与纯 JSON 不同。
    【解决方案3】:

    您可以使用 =IMPORTDATA(E1) 并将整个块放入表格中,然后 REGEXEXTRACT 您需要的所有部分

    【讨论】:

    • 是的,错字,对不起...已修复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 2013-01-19
    相关资源
    最近更新 更多