使用SQL获取嵌套json对象中第一个键的值

时间:2015-08-25 23:57:55

标签: sql json postgresql

Json格式为

{
  "query": {
    "pages": {
      "294195": {
        "id": 294195,
        "title": "title 123",
        "detail": "detail content..."
      }
    }
  }
}

我想阅读294195以及此元素下的详细信息。

但实际上元素名称'294195'是动态的。

我不能使用294195作为元素名称:

"Json"->'query'->'pages'->'294195'

有没有像

那样
"Json"->'query'->'pages'->Firt_Element_Name->'id'

注意:"Json"是列名,类型为Json。

2 个答案:

答案 0 :(得分:0)

Json.query.pages[0].title
Json.query.pages[0].details

为“详细信息”提供“标题”和第一个密钥对值的第一个密钥对值,而不管第一个生成的数字是什么。无论您动态获得#,这都有效。将它弹出到一个函数中,您可以将它们设置为var并将它们连接成一个字符串,或将它们推入一个数组/对象。

答案 1 :(得分:0)

这是一个有点尴尬的b / c我必须先创建你的原始json对象才能查询它,但这里是一个PostgreSQL剪切和粘贴解决方案,它将在294195下提取数据:

with origjson as (select '{"query": {"pages": {"294195": {"id": 294195,"title": "title 123","detail": "detail content..."}}}}'::jsonb as pagedata)
,firstid as (select jsonb_object_keys(pagedata #> '{query, pages}') as id from origjson)
select pagedata #> ('{query, pages, ' || (select id from firstid limit 1) || '}')::text[] from origjson;

结果:

{"id": 294195, "title": "title 123", "detail": "detail content..."}