sql - 如何在 Postgresql 中为每个返回的行过滤 json 数组
问题描述
如果对象结构是这样的,你能帮我吗?
我有一个带有 JSON 字段的表,其中存储了一个对象数组。我想查询这个表,并且对于每个返回的行,通过使用某些条件过滤它们,只返回 json 数组对象的子集。
例如对于行:
id = 1, jsonColumn = [{ field: 'abc', Observation: [Value: 'Value1'] },{ field: 'def', Observation: [Value: 'Value2'] },{ field: 'ghi, Observation: [Value: 'Value3']' }]
id = 2, jsonColumn = [{ field: 'pqr', Observation: [Value: 'Value1'] },{ field: 'aaa', Observation: [Value: 'Value2'] },{ field: 'ccc, Observation: [Value: 'Value3']' }]
id = 3, jsonColumn = [{ field: 'www', Observation: [Value: 'Value1'] },{ field: 'qqq', Observation: [Value: 'Value2'] },{ field: 'rrr', Observation: [Value: 'Value3']' }]
我想选择所有行,并且每行应仅包含在 jsonColumn 中 field = 'abc' 和 Value = 'Value1' 的元素。我只想过滤此列,而不是返回包含数组中特定元素的行...
解决方案
您可以使用子选择json_array_elements
,然后将其聚合回数组:
SELECT
id,
( SELECT json_agg(element)
FROM json_array_elements(json_column) element
WHERE … -- e.g. element -> 'field' = …
) AS filtered_json_column
FROM
table
推荐阅读
- javascript - 在应用程序启动时启动 Bull Queue 进程
- google-drive-api - 谷歌计算实例和谷歌驱动器之间的谷歌驱动器api
- tensorflow - 在 tensorflow 版本 1.14 和 2.0 上训练 TensorFlow 对象检测模型时出错
- powershell - PowerShell获取文件夹中没有路径和tsv行数的文件名
- python - 在 Django admin TabularInline 中替换“添加另一行”按钮的 href
- angular - ctx。在 Angular 中未定义
- reactjs - 两次通过数组的简单反应错误映射
- javascript - 检查数组中的所有值,如果不是字符串则返回 false
- python - 如何在 Django 中替换一个模型对象的一个字段?
- java - 如何使用 mockito 模拟 JavaFX 控件?