如何在PostgreSQL中为每个返回的行过滤JSON数组

时间:2020-02-04 13:38:31

标签: sql json postgresql

如果对象结构是这种情况,请您帮我

我有一个带有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'的元素。我只想过滤此列,而不返回包含数组中特定元素的行...

1 个答案:

答案 0 :(得分:2)

您可以使用子选择和json_array_elements,然后再选择aggregated back to an array

SELECT
  id,
  ( SELECT json_agg(element)
    FROM json_array_elements(json_column) element
    WHERE … -- e.g. element -> 'field' = …
  ) AS filtered_json_column
FROM
  table
相关问题