【问题标题】:Select objects inside array JSONB选择数组 JSONB 中的对象
【发布时间】:2017-02-01 20:53:31
【问题描述】:

我正在尝试在 Postgres db 和 Groovy 中使用 JSONB 抓取数组中的对象。

我的 Json 的结构是这样的,存储在我的数据库中。

"playersContainer": {
        "players": [
            {
                "id": "1",
                "name": "Nick",
                "teamName": "Shire Soldiers",
                "ratings": [
                    1,
                    5,
                    6,
                    9
                ],
                "assists": 17,
                "manOfTheMatches": 20,
                "cleanSheets": 1,
                "data": [
                    3,
                    2,
                    3,
                    5,
                    6
                ],
                "totalGoals": 19
            },
            {
                "id": "2",
                "name": "Pasty",
                "teamName": "Shire Soldiers",
                "ratings": [
                    6,
                    8,
                    9,
                    10
                ],
                "assists": 25,
                "manOfTheMatches": 32,
                "cleanSheets": 2,
                "data": [
                    3,
                    5,
                    7,
                    9,
                    10
                ],
                "totalGoals": 24
            }
        ]
    }

我想抓取玩家数组中的对象,循环遍历它们,将它们映射到我的项目中的对象模型并将它们存储在一个列表中。

目前我使用这个查询:

SELECT content -> 'playersContainer' -> 'players' from site_content

这让我回来了

[{"id": "1", "bio": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla imperdiet lorem tellus, in bibendum sem dignissim sed. Etiam eu elit sit amet lacus accumsan blandit sed ut dolor. Mauris vel dui non nisi vestibulum commodo vel id magna. Donec egestas magna in tincidunt mollis. Fusce mauris arcu, rhoncus ut lacus sed, fermentum ultrices elit. In sollicitudin at ex dapibus vestibulum. Pellentesque congue, est id lobortis viverra, mauris lectus pharetra orci, ut suscipit nisl purus vehicula est. Aliquam suscipit non velit vel feugiat. Quisque nec dictum augue.", "data": [3, 2, 3, 5, 6], "name": "Nick Pocock", "assists": 17, "ratings": [1, 5, 6, 9], "teamName": "Shire Soldiers", "totalGoals": 19, "cleanSheets": 1, "manOfTheMatches": 20}, {"id": "2", "bio": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla imperdiet lorem tellus, in bibendum sem dignissim sed. Etiam eu elit sit amet lacus accumsan blandit sed ut dolor. Mauris vel dui non nisi vestibulum commodo vel id magna. Donec egestas magna in tincidunt mollis. Fusce mauris arcu, rhoncus ut lacus sed, fermentum ultrices elit. In sollicitudin at ex dapibus vestibulum. Pellentesque congue, est id lobortis viverra, mauris lectus pharetra orci, ut suscipit nisl purus vehicula est. Aliquam suscipit non velit vel feugiat. Quisque nec dictum augue.", "data": [3, 5, 7, 9, 10], "name": "Connor Pasty", "assists": 25, "ratings": [6, 8, 9, 10], "teamName": "Shire Soldiers", "totalGoals": 24, "cleanSheets": 2, "manOfTheMatches": 32}]

这给了我一个对象数组但是我只想要里面的对象 然后我想遍历对象,映射它们并将它们存储在一个列表中,就像在 Groovy 中这样。

    Blocking.get {
            sql.rows("""
            SELECT content -> 'playersContainer' -> 'players' from site_content
              """)
        }.map { rows ->
            rows.collect { GroovyRowResult result ->      
                objectMapper.readValue(result, Player)
            }
        }
    }

这可以用 JSONB 实现吗?

【问题讨论】:

  • 您找到解决方案了吗?

标签: json postgresql groovy psql jsonb


【解决方案1】:

您可以使用jsonb_array_elements (read the docs)

SELECT jsonb_array_elements(content->'playersContainer'->'players') FROM site_content

【讨论】:

  • 这似乎让我想起了这个 jsonb_array_elements={"id": "1", "bio": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla imperdiet lorem tellus, in bibendum sem dignissim sed. Etiam eu elit sat amet lacus accumsan blandit sed ut dolor. Mauris vel dui non nisi vestibulum},知道为什么我不只是获取数组的元素吗?
  • {"id": "1", "bio": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla imperdiet lorem tellus, in bibendum sem dignissim sed. Etiam eu elit sit amet lacus accumsan blandit sed ut dolor. Mauris vel dui non nisi vestibulum}不是数组的元素吗?
猜你喜欢
  • 1970-01-01
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多