首页 > 解决方案 > 如何根据 PostgreSQL 中 JSON 中的另一个字符串从 JSON 中查询一个字符串?

问题描述

我的 PostgreSQL 数据库中的 MyTable.MyField 包含以下(简化的)JSON 块:

{
    "base": {
        "fields": [
            {
                "fieldid": "c12f",
                "fieldname": "sizes",
                "choices": [
                    {
                        "choiceid": "2db3",
                        "size": "small"
                    },
                    {
                        "choiceid": "241f",
                        "size": "medium"
                    },
                    {
                        "choiceid": "3f52",
                        "size": "large"
                    }
                ],
                "answer": "241f"
            }
        ]
    }
}

请问如何使用 的值从数组answer中提取所选内容(即在本例中为“中”)?sizechoices

(注意:我已经尝试过。有关此问题的 TLDR 版本,请参阅Trying to construction PostgreSQL Query to extract from JSON a text value in an object, in an array, in an object, in an array, in an object。)

谢谢你。

标签: sqljsonpostgresqlpostgresql-9.4

解决方案


您可以json_array_elements在横向连接中使用,然后只需查询您要查找的字段:

SELECT
  field -> 'fieldid' AS id,
  choice -> 'size' AS size
FROM
  my_table,
  json_array_elements(json_column -> 'base' -> 'fields') field,
  json_array_elements(field -> 'choices') choice
WHERE
  field ->> 'answer' = choice ->> 'choiceid'

推荐阅读