【问题标题】:Is there a Google Sheets or MS Excel formula to convert a column with JSON array to multiple rows是否有 Google Sheets 或 MS Excel 公式将带有 JSON 数组的列转换为多行
【发布时间】:2019-07-25 05:55:44
【问题描述】:

我正在尝试解析 Excel 文件中包含 JSON 数组数据的列。我想将该 JSON 数组转换为多行。

我尝试过将文本拆分为列,但结果不一致。

输入:

预期输出:

您可以在此 Google 工作表中找到我的输入和预期输出工作表
https://docs.google.com/spreadsheets/d/1zohaZXEoppbn4GBq-BLEFHk5n4PPwYPOTnbZbq6YbNs/edit?usp=sharing

【问题讨论】:

  • 你有没有想过创建一个脚本?

标签: json regex google-sheets google-sheets-formula array-formulas


【解决方案1】:

有很多方法,其中一种是:

=ARRAYFORMULA(SPLIT(TRANSPOSE(SPLIT(TRIM(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
 IF(IFERROR(SPLIT(C2:C, ","))<>"", "♦"&A2:A&"♠"&B2:B&"♠"&
 REGEXEXTRACT(SPLIT(SUBSTITUTE(C2:C, """", ), ","), ":(\d+)"), ))
 ,,999^99)),,999^99)), "♦")), "♠"))


=ARRAYFORMULA(SPLIT(TRANSPOSE(SPLIT(TRIM(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
 IF(LEN(A2), "♦"&A2&"♠"&B2&QUERY(TRANSPOSE("♠"&QUERY(REGEXEXTRACT(SPLIT(
 TRANSPOSE(SPLIT(SUBSTITUTE(C2, """", ), "{")), ","), ":(\d+)"), "offset 1", 0))
 ,,999^99), )),,999^99)),,999^99)), "♦")), "♠"))

【讨论】:

  • 这是如何工作的?如果每个对象有多个键,它是否也支持这个 JSON 数组?
  • 当使用这个公式和每个对象有多个键的 JSON 时,它会将它们分成多行而不是多列
  • 感谢您的帮助,现在它正在处理多个列。但它仅适用于整数值而不适用于字符串值。我已经更新了谷歌表。我接受你的回答,但如果你能帮忙解决这个问题,我将不胜感激。谢谢
  • 试试:=ARRAYFORMULA(SPLIT(TRANSPOSE(SPLIT(TRIM(QUERY(TRANSPOSE(QUERY(TRANSPOSE( IF(LEN(A2), "♦"&amp;A2&amp;"♠"&amp;B2&amp;QUERY(TRANSPOSE("♠"&amp;QUERY(REGEXEXTRACT(SPLIT( TRANSPOSE(SPLIT(REGEXREPLACE(C2, """|]|}", ), "{")), ","), ":(.+)"), "offset 1", 0)) ,,999^99), )),,999^99)),,999^99)), "♦")), "♠")) - i.stack.imgur.com/URIXN.png
【解决方案2】:

可以采用我项目中的代码。

是一种棘手的格式,它使用不同的数据类型,还可能包含嵌套项:

{ key: { key1: "a", key2: "b" } }

这就是为任务使用 的原因。

copy 示例文件:

或在此处查看源代码:

https://github.com/Max-Makhrov/GoogleSheets/blob/master/Json.gs

示例用法:

=getJsonArrayAsTable(C2)

【讨论】:

    【解决方案3】:

    我今天需要在 Google 表格中做类似的事情。我想出的解决方案非常简单。它可能很有用,但有几个依赖项:

    • JSON 数据符合类似于 Google Apps 脚本范围的结构(以下示例)**。
    • 使用 Google Apps 脚本定义的 custom function

    自定义函数

    function JSONTOJS(JSONString) {
      return JSON.parse(JSONString);
    }
    

    样本数据

    一个简单的列表:

    ["Option 1", "Option 2", "Option 3", "Option 4"]
    

    表格数据:

    [["Title 1", "Title 2", "Title 3", "Title 4"], ["Option 1", "Option 2", "Option 3", "Option 4"], ["Option 5", "Option 6", "Option 7", "Option 8"]]
    

    键:值对:

    [["key1","value 1"], ["key2","value 2"], ["key3","value 3"]]
    

    使用中: 假设这些 JSON 字符串之一在单元格 A1 中,在其他一些单元格中输入以下公式,数据将显示在工作表的单元格中。

    =JSONTOJS(A1)
    

    Example Sheet(get a copy of it)

    ** 如果您要定义数据结构,这可能很有用。您不太可能以这种格式从某些服务接收数据(这在 Google 表格中是独一无二的),在这种情况下,您的里程会有所不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      相关资源
      最近更新 更多