Postgresql Postgres删除jsonb字段中的反斜杠

Postgresql Postgres删除jsonb字段中的反斜杠,postgresql,postgresql-9.4,Postgresql,Postgresql 9.4,我有一个jsonb字段,我们称之为info,它的值如下 {"a": "foo", "c": "{ \"d\": \"dog\"}", \"b\": \"bark\"} 使用Postgres如何删除反斜杠? 我试着用 REPLACE(info::text, '\', '') 还是这个 REGEXP\u REPLACEinfo::text“\” 这两种方法都有效 有人能帮忙吗?查询lowerise jsonb: WITH RECURSIVE z3 AS ( WITH z2 AS (

我有一个jsonb字段,我们称之为info,它的值如下

{"a": "foo", "c": "{ \"d\": \"dog\"}", \"b\": \"bark\"}
使用Postgres如何删除反斜杠? 我试着用

REPLACE(info::text, '\', '')
还是这个 REGEXP\u REPLACEinfo::text“\”

这两种方法都有效


有人能帮忙吗?

查询lowerise jsonb:

WITH RECURSIVE z3 AS (
     WITH z2 AS (
          WITH RECURSIVE z AS (
               WITH x AS (
                   -- just your variable
                   SELECT '{"a":"foo", "b":"BARK", "c" :{ "d": "dog"}}'::jsonb AS j
               ) SELECT j,
                        ARRAY [ a ] AS a
                 FROM (
                        SELECT j,
                               jsonb_object_keys(j) AS a
                          FROM x
                      ) AS a
                 UNION ALL SELECT j,
                        a || b
                  FROM (
                        SELECT j,
                               a,
                               jsonb_object_keys(j#>(a)) AS b
                          FROM z
                         WHERE j#>>(a) ~ '^\{.*\}$'
                       ) AS A
           ) SELECT *,
                    dense_rank() OVER (ORDER BY a) AS i
               FROM z
              WHERE NOT j#>>(a) ~ '^\{.*\}$'
       ) SELECT i,
                jsonb_set(j, a, to_jsonb(lower(j#>>(a)))) AS j
           FROM (
                  SELECT * FROM z2 ORDER BY i LIMIT 1
                ) AS a
        UNION ALL SELECT z2.i,
                jsonb_set(z3.j,
                z2.a,
                to_jsonb(lower(z3.j#>>(z2.a))))
           FROM z3
           JOIN z2 ON (z2.i = z3.i + 1)
  ) SELECT j FROM z3 ORDER BY i DESC LIMIT 1;
一些解释: ZCTE在jsonb对象中查找所有字符串。''是json字符串的路径。输出:

                      j                       |   a   | dense_rank 
----------------------------------------------+-------+------------
 {"a": "foo", "b": "BARK", "c": {"d": "dog"}} | {a}   |          1
 {"a": "foo", "b": "BARK", "c": {"d": "dog"}} | {b}   |          2
 {"a": "foo", "b": "BARK", "c": {"d": "dog"}} | {c,d} |          3
(3 rows)

z3和dense_秩用于将每个select递归调用中的一个应用于json。

这是json/jsonb吗?为什么需要删除\?\used,因为这是字符串-c:{\d\:\dog\}中的引号。可能您只需要对象c:{d:dog}?这是json操作的结果。对特别是,下面的代码是:创建或替换函数update_infoinfo jsonb返回jsonb语言sql作为$$select json_object array_aggkey,array_agg case key,当为'b'时,然后是lowervalue else value end::jsonb from jsonb_each_textinfo$$;我最初尝试在这个jsonb字段中对属性进行小写,如下--{a:foo,b:BARK,c:{d:dog}。所以,感谢其他出色的人,他们帮助我实现了这个功能,我离它很近了。但是在运行这个脚本之后,我在jsonb中使用了反斜杠。