加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL unescape JSON字符串

发布时间:2020-12-13 18:05:32 所属栏目:百科 来源:网络整理
导读:我正在尝试在PostgreSQL 9.3中使用新的 JSON功能,而我正在寻找一种能够使用JSON的功能,即to_json(anyelement)的对话. 以下是JSON示例: {"single_comment": "Fred said "Hi."","comments_array": ["Fred said "Hi."","Fred said "Hi."","Fred said "H
我正在尝试在PostgreSQL 9.3中使用新的 JSON功能,而我正在寻找一种能够使用JSON的功能,即to_json(anyelement)的对话.

以下是JSON示例:

{"single_comment": "Fred said "Hi."","comments_array": ["Fred said "Hi."","Fred said "Hi."","Fred said "Hi.""]}

查询:

SELECT json_array_elements(json_column->'comments_array')

返回文档中描述的SET OF JSON.

"Fred said "Hi.""
"Fred said "Hi.""
"Fred said "Hi.""

有没有办法取消结果,所以我可以得到以下结果:

Fred said "Hi."
Fred said "Hi."
Fred said "Hi."

在文档中,我没有看到任何可以帮助我的功能.不幸的是,对我来说,不能选择PLV8.

任何想法都受到高度赞赏.

我自己也遇到过这个问题,这就是我接触它的方式.我创建了一个辅助函数,它迭代数组并使用 – >>运算符使用下标来获取文本值.如果有人知道更好的方式,我很高兴听到它,因为这看起来有点笨拙.
CREATE OR REPLACE FUNCTION json_text_array_to_pg_text_array(data json) returns text[] AS $$
DECLARE
    i integer;
    agg text[];
BEGIN
    FOR i IN 0..json_array_length(data)-1 LOOP
        agg := array_append(agg,data->>i);
    END LOOP;

    return agg;
END
$$language plpgsql;

然后你可以做以下事情:

test=# select json_text_array_to_pg_text_array('[ "hello","the"re","i''m","an","array" ]'::json);
 json_text_array_to_pg_text_array 
----------------------------------
 {hello,i'm,an,array}
(1 row)

如果您不想直接处理数组,也可以使函数返回一组文本:

CREATE OR REPLACE FUNCTION json_text_array_to_row(data json) returns setof text AS $$
DECLARE
    i integer;
BEGIN
    FOR i IN 0..json_array_length(data)-1 LOOP
        return next data->>i;
    END LOOP;
    return;
END
$$language plpgsql;

然后这样做:

test=# select json_text_array_to_row('{"single_comment": "Fred said "Hi."","Fred said "Hi.""]}'::json->'comments_array');
 json_text_array_to_row 
------------------------
 Fred said "Hi."
 Fred said "Hi."
 Fred said "Hi."
(3 rows)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读