我有这个JSON:

[{
    "id": 1,
    "meta": [{
            "key": "key1",
            "value": "ValueKey1"
        }, {
            "key": "key2",
            "value": "ValueKey2"
        }
    ]
}, 
{
    "id": 2,
    "meta": [{
            "key": "key2",
            "value": "ValueKey2"
        }
    ]
}, 
{
    "id": 3,
    "meta": [{
            "key": "key1",
            "value": "ValueKey1"
        }
    ]
}]

我想要得到key1的所有ID的结果,那些没有key1返回值的结果应该为空.

我得到了没有ID的结果,没有键1或所有键的所有组合.

结果应该如下所示:

Id   MetaValue 
---------------
1    ValueKey1
2    NULL 
3    ValueKey1

到目前为止,我try 了这个带和不带WHERE子句的方法:

select Id, MetaValue
from openjson('[{"id":1,"meta":[{"key":"key1","value":"ValueKey1"},{"key":"key2","value":"ValueKey2"}]},{"id":2,"meta":[{"key":"key2","value":"ValueKey2"}]},{"id":3,"meta":[{"key":"key1","value":"ValueKey1"}]}]', '$')
with(
    id int '$.id',
    jMeta nvarchar(max) '$.meta' as JSON
    )
outer apply openjson(jMeta)
with(
    cKey varchar(100) '$.key',
    MetaValue varchar(100) '$.value'
    )
where isnull(cKey,'') in ('','Key1')

其结果是:

Id  MetaValue
-------------
1   ValueKey1
3   ValueKey1

Id  MetaValue
-------------
1   ValueKey1
1   ValueKey2
2   ValueKey2
3   ValueKey1

推荐答案

试着像这样用GROUP BY

with cte as (
  select Id, cKey, MetaValue
  from openjson('[{"id":1,"meta":[{"key":"key1","value":"ValueKey1"},{"key":"key2","value":"ValueKey2"}]},{"id":2,"meta":[{"key":"key2","value":"ValueKey2"}]},{"id":3,"meta":[{"key":"key1","value":"ValueKey1"}]}]', '$')
  with (
    id int '$.id',
    jMeta nvarchar(max) '$.meta' as JSON
  )
  outer apply openjson(jMeta)
  with (
    cKey varchar(100) '$.key',
    MetaValue varchar(100) '$.value'
  )
)
SELECT id, MAX(CASE WHEN cKey = 'key1' THEN MetaValue END) AS MetaValue
FROM cte
GROUP BY id

Json相关问答推荐

(Kotlin)com.google.gson.internal.LinkedTreeMap无法转换为com.example.phonetest2.model.HallData

在linux控制台中解析json字符串的最简单方法是什么?

NoneType 对象的 Python 类型错误

Oracle JSON 查询中的动态列列表

在 VS Code 中将一个正则表达式替换为另一个正则表达式

从 Inno Setup 中的 JSON 文件的每个对象中读取特定字符串

jq json - 按键名 Select

NiFi 使用嵌套数组将 avro 转换为 JSON 数组格式

从 JSON 响应中获取最新版本发布字段

从 PowerShell 编辑 Windows 终端配置文件设置 JSON

将哈希表转换为 json 后,Powershell 缺少数组

Jolt - 在同一级别添加时组合值的问题

以 JSON 格式访问(新型、公共)Google 工作表

Android 上的 JSON - 序列化

如何通过 NSJSONSerialization 在 JSON 中包含空值?

ASP.NET MVC:使用 JsonResult 控制属性名称的序列化

如何将有向无环图 (DAG) 存储为 JSON?

在自定义 JsonConverter 的 ReadJson 方法中处理空对象

将多个值存储在json中的单个键中

Java HashMap 与 JSONObject