【问题标题】:Merge JSON array to a single string将 JSON 数组合并为单个字符串
【发布时间】:2015-12-13 23:54:07
【问题描述】:

我有一个名为 qn 的字段,属于这种形式的 JSONB 类型:

[{id: 1, text: 'A'}, {id: 2, text: 'B'}]

要获取所有文本,我可以这样做:

SELECT jsonb_array_elements(qn)->>'text' from templates where id=1

我的问题是,我怎样才能像这样合并成一个字符串:

A, B

如果字段不是 JSONB,可以使用:

SELECT array_to_string(ARRAY(select title from templates), ', ');

如果字段是JSONB怎么办?

【问题讨论】:

    标签: json postgresql jsonb


    【解决方案1】:

    简单地聚合成一个字符串:

    SELECT string_agg(txt, ', ') AS all_text
    FROM (
      SELECT jsonb_array_elements(qn)->>'text' AS txt
      FROM templates
      WHERE id = 1) sub;
    

    【讨论】:

    • Tks,它适用于这种形式。我实际上试图在to_tsvector 使用它。 setweight(to_tsvector(coalesce(array_to_string(array(jsonb_array_elements(new.questions)->>'text'), ', '), '')), 'D');
    【解决方案2】:

    抱歉,无法评论。主题启动器需要 tsvector 列。对于名为article 的文本列,我有这样的结构,其中包含json 数据,并且需要在键text 中搜索文本:

    {"time": "some time_structure", "data": {"blocks": [{"data": {"text": "Some long, long text", "image": "image_url"}}, {"data": {"text": "another long text"}}]}}
    

    我是这样生成 tsvector 字段的:

    setweight(to_tsvector('russian'::regconfig, jsonb_path_query_array(article::jsonb, '$.blocks[*].data.text')), 'C')
    

    【讨论】:

      猜你喜欢
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 2012-06-18
      相关资源
      最近更新 更多