【问题标题】:Build jsonb array from jsonb field从 jsonb 字段构建 jsonb 数组
【发布时间】:2019-09-09 16:05:23
【问题描述】:

我有列 options 类型为 jsonb ,格式为 {"names": ["name1", "name2"]} ,它是用

创建的
UPDATE table1 t1 SET options = (SELECT jsonb_build_object('names', names) FROM table2 t2 WHERE t2.id= t1.id)

names 的类型为 jsonb 数组。

SELECT jsonb_typeof(names) FROM table2array

现在我想将names 的值提取为 jsonb 数组。但是查询

SELECT jsonb_build_array(options->>'names') FROM table 

给了我["[\"name1\", \"name2\"]"],而我期待["name1", "name2"]

我怎样才能以正确的格式获得价值?

【问题讨论】:

    标签: postgresql jsonb


    【解决方案1】:

    ->> 运算符会将字段的值(在您的情况下为 JSON 数组)作为正确转义的文本返回。您正在寻找的是 -> 运算符。

    但是,请注意,使用 jsonb_build_array 将返回一个包含原始数组的数组,这可能也不是您想要的;只需使用options->'names' 就能得到你想要的。

    【讨论】:

      【解决方案2】:

      其实你不需要使用jsonb_build_array()函数。

      使用select options -> 'names' from table; 这将解决您的问题。

      jsonb_build_array() 用于从jsonb 对象生成数组。你走错路了。这就是为什么你会得到这样的字符串["[\"name1\", \"name2\"]"]

      尝试执行这个示例 SQL 脚本:

      select j->'names'
      from (
        select '{"names": ["name1", "name2"]}'::JSONB as j
      ) as a;
      

      【讨论】:

        猜你喜欢
        • 2020-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-03
        • 1970-01-01
        • 2019-02-12
        • 1970-01-01
        • 2018-07-25
        相关资源
        最近更新 更多