首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JSON数组的属性加入到一个值中

问将JSON数组的属性加入到一个值中
EN

Stack Overflow用户
提问于 2021-02-18 21:30:40
回答 1查看 142关注 0票数 0

我有一个包含序列化JSON数组的nvarchar列的表。

我要做的是解析这个数组,并将属性的值重新加入到一个字符串中。

以下是专栏内容:

​

​

在我的最后一个查询中,我希望它作为一个值来显示,比如"MergedValues“中的”value“。很明显,如果数组中有很多项,我想看"Videowall,Factory,Car“等等。

以下是我迄今所尝试的

代码语言:javascript
复制
SELECT *,
      (SELECT Name
         FROM OPENJSON(JsonColumn)
         WITH 
         (
          Id   VARCHAR(200) '$.Id',
          Name VARCHAR(200) '$.Name'
         )) 
  FROM MyTable
 WHERE JsonColumn <> '[]'

这个明显的错误出现了。

子查询返回的值超过一个。当子查询跟随=、!=、<、<=、>、>=或子查询用作表达式时,这是不允许的。

我认为这是加入了许多被分析的结果,而这些结果是缺失的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-19 06:54:48

您需要为每一行聚合来自OPENJSON()调用的结果:

表:

代码语言:javascript
复制
SELECT *
INTO Data
FROM (VALUES
   (0, 0, 25200, '[{"Id":"10564", "Name": "Videowall"}]'),
   (0, 0, 9200, '[{"Id":"10564", "Name": "Videowall"},{"Id":"10565", "Name": "Factory"}]')
) v (OriginalEstimateSeconds, RemainingEstimateSeconds, TimeSpentSeconds, ComponentsJSON)

声明:

代码语言:javascript
复制
SELECT
   OriginalEstimateSeconds, RemainingEstimateSeconds, TimeSpentSeconds, ComponentsJSON,
   MergedValues = (
      SELECT STRING_AGG([Name], ',')
      FROM OPENJSON(ComponentsJSON) WITH (Name varchar(100) '$.Name')
   )
FROM Data 

结果:

代码语言:javascript
复制
... ComponentsJSON                                                          MergedValues
---------------------------------------------------------------------------------------------
... [{"Id":"10564", "Name": "Videowall"}]                                   Videowall
... [{"Id":"10564", "Name": "Videowall"},{"Id":"10565", "Name": "Factory"}] Videowall,Factory

如果新生成的文本中的$.Name值的顺序很重要,您可以使用以下脚本:

代码语言:javascript
复制
SELECT
   OriginalEstimateSeconds, RemainingEstimateSeconds, TimeSpentSeconds, ComponentsJSON,
   MergedValues = (
      SELECT STRING_AGG(JSON_VALUE([value], '$.Name'), ',') WITHIN GROUP (ORDER BY CONVERT(int, [key]))
      FROM OPENJSON(ComponentsJSON)
   )
FROM Data
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66268436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档