如何在 Microsoft Excel 中解析 JSON 或 CSV 字符串中的单个值?或者谷歌表格?

sta*_*ire 12 excel vba json google-sheets google-apps-script

我将有数百个单元,它们将使用 Web 服务调用来获取股票数据。但是,数据仅以 JSON 或 CSV 格式返回。举一个例子,我怎样才能从每个动态 JSON 或 CSV 字符串中仅获取“uHigh”值,给出下面的示例并知道数字值的长度每次都可能不同?

[{"date":"2020-01-22","uClose":1485.95,"uOpen":1491,"uHigh":1503.21,"uLow":1484.93,"uVolume":1610846,"close":1485.95,"open":1491,"high":1503.21,"low":1484.93,"volume":1610846,"change":1.55,"changePercent":0.1044,"label":"Jan 22","changeOverTime":0.001044}]
Run Code Online (Sandbox Code Playgroud)

或者我可以解析 CSV,例如

"date,uClose,uOpen,uHigh,uLow,uVolume,close,open,high,low,volume,change,changePercent,label,changeOverTime,symbol
2020-01-22,1485.95,1491,1503.21,1484.93,1610846,1485.95,1491,1503.21,1484.93,1610846,1.55,0.1044,Jan 22,0.001044,GOOG"
Run Code Online (Sandbox Code Playgroud)

Excel 提供了一种 FILTERXML 方法,但据我所知,没有用于 JSON 或 CSV 的方法,那么我可以在“=something-here”单元格值中放入什么来仅解析出 uHigh 值?

如果有帮助的话我会使用 Google Sheets。

IMT*_*Man 9

对于 Google 表格

如果你想从Google Sheets 中的JSON 中提取,你可以REGEXEXTRACT这样使用:

  • 将 JSON 放入A1
  • 输入您要查找的密钥B1
  • 把这个公式代入C1=REGEXEXTRACT(A1, """" & B1 & """ *: *(.*?),")

您可以通过更改 中的查找键来测试它B1

在此输入图像描述

如果你想从 CSV 中提取,你可以使用这个:

  • 将 CSV 输入A1
  • 输入您要查找的密钥B1
  • 把这个公式代入C1=VLOOKUP(B1, TRANSPOSE(ARRAYFORMULA(SPLIT(TRANSPOSE(SPLIT(A1, char(10))), ","))), 2, FALSE)

您可以通过更改 中的查找键来测试它B1

免责声明:只有当 JSON/CSV 是有效/标准格式时,这两种方法才有效。需要注意以下几点:

  • 如果该值被引用并且有逗号,则 JSON 将会失败。例如:{"key" : "value, value"}
  • 如果字段分隔符逗号也用在键/值中,则 CSV 将会失败。

在此输入图像描述

对于Excel

如果您想从Excel 中的JSON 中提取数据,您可以混合使用SEARCHFIND、 和 ,MID如下所示:

  • 将 JSON 放入A1
  • 输入您要查找的密钥B1
  • 把这个公式代入C1=TRIM(MID(A2,FIND(":", A2, FIND(""""&B2&"""", A2))+1,SEARCH(",",A2,FIND(":", A2, FIND(""""&B2&"""", A2)))-FIND(":", A2, FIND(""""&B2&"""", A2))-1))


bos*_*yip 5

提取“uHigh”字样后的值

JSON format类型数据放入A2

在 中B2,输入公式:

=LOOKUP(9^9,0+MID(A2,SEARCH("uHigh",A2)+7,ROW($1:$99)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


sta*_*ire 0

我了解到可以对 CSV 字符串使用 Split,然后按数字从结果字符串数组中提取所需的项目。这已被另一个人实现,如下所示:

查找逗号分隔列表中的第 n 项

当然,如果能通过一次更简单的调用来完成这一任务,那就太好了。