【问题标题】:How to extract a json value inside an array inside a json in SQL如何在SQL中的json内的数组中提取json值
【发布时间】:2021-10-01 08:04:00
【问题描述】:

我的查询中返回了一个名为 MetaDataJSON 的 JSON,其中包含一个名为 Results 的 JSON 数组。 Results 中的每个 JSON 内部都有两个值,Chronic 和 Probability。还有几个其他表也已加入。有没有办法让慢性病单独出现在一个专栏中?现在我已经走到了这一步(表和变量名已经通用):

SELECT DISTINCT
    JSON_QUERY(mdj.value, '$.Results[0]') [Results]
FROM table1 t1
JOIN table2 t2 ON t2.parameter1 = t1.parameter1
    AND t2.parameter2 = 'ASDF'
JOIN table3 t3 ON oad.parameter3 = oa.parameter3 
    AND t3.parameter4 = 11
CROSS APPLY OPENJSON(t3.MetaDataJSON) as mdj

这让我得到一个名为 Results 的列,其中每个条目看起来像:

{"Chronic": 0, "Probability": 0.0016}

有没有一种有效的方法可以让 Chronic 单独出现在列中?谢谢!

【问题讨论】:

  • 可以添加数据库标签吗?

标签: sql arrays json


【解决方案1】:

你可以这样做,

WITH jsons (x)  
AS  
(  
    -- replace this part with your query
    Select a.x from (select '{"Chronic": 0, "Probability": 0.0016}' x ) as a, (SELECT 1 as y union select 2 as y ) as b
)  
select 
    (SELECT value FROM OPENJSON(x,'$') where [key]='Chronic') as "Chronic", 
    (SELECT value FROM OPENJSON(x,'$') where [key]='Probability') as "Probability" 
from jsons;

我认为您可以更改 @json 方程式以使用您的查询。但我不能尝试,因为我没有你的桌子......

顺便说一句,我假设您使用的是 MSSQL...

【讨论】:

  • 感谢您的回复!我可以这样设置@json:SET @json=SELECT DISTINCT JSON_QUERY(mdj.value, '$.Results[0]') [Results] FROM table1 t1 JOIN table2 t2 ON t2.parameter1 = t1.parameter1 AND t2。 parameter2 = 'ASDF' JOIN table3 t3 ON oad.parameter3 = oa.parameter3 AND t3.parameter4 = 11 CROSS APPLY OPENJSON(t3.MetaDataJSON) as mdj FOR JSON AUTO 因为这似乎不起作用......它说“不正确关键字'SELECT'附近的语法。”是的,我相信我正在运行 MS-SQL
  • 在选择前后使用括号。 @json=(选择....)
  • 啊,谢谢,但这仍然不太有效。这是我的@json 值的样子,如果我在用查询填充它之后执行 SELECT @json: [{"Results":{"chronic": 0, "probability": 0.00433}},{"Results":{ "chronic": 0, "probability": 0.00029}}] 但是当我做你的最后一部分时,使用嵌套的 SELECT 值,我得到一个小的 1 行表,其中包含 Chronic 和 Probability 列,它们的值都是 NULL。是不是因为Results键还没有从json结构中移除?
  • 我更新了解决方案。现在它可以转换多行。确保您的查询返回带有 Json 字符串的单列
  • 我仍然有这个问题,可能是因为我不知道用我的查询替换哪个部分。是该示例中的绿色虚拟 json 结构吗?您能否编辑示例并粘贴以下内容: SELECT DISTINCT...FOR JSON AUTO 在我的查询应该去的确切位置?是的,单独的查询以这种格式返回一行一行: [{"results":{"chronic": 0, "probability": 0.0018}},{"results":{"chronic": 0, “概率”:0.0023}}] 虽然列名类似于 JSON_F52E2B61-18A1... 这很奇怪
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
  • 2019-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
相关资源
最近更新 更多