PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chuỗi JSON PostgreSQL unescape

Tôi vừa mới gặp vấn đề này, và đây là cách tôi tiếp cận vấn đề này. Tôi đã tạo một hàm trợ giúp lặp qua mảng và sử dụng toán tử ->> bằng cách sử dụng chỉ số con để lấy lại giá trị văn bản. Nếu có ai biết cách hay hơn, tôi rất vui khi biết về nó, vì điều này có vẻ hơi klunky.

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;

Sau đó, bạn có thể làm những việc như:

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,"the\"re",i'm,an,array}
(1 row)

Bạn cũng có thể làm cho hàm chỉ trả về một tập hợp văn bản nếu bạn không muốn xử lý trực tiếp các mảng:

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;

Và sau đó làm điều này:

test=# select json_text_array_to_row('{"single_comment": "Fred said \"Hi.\"" ,"comments_array": ["Fred said \"Hi.\"", "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)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao sử dụng IS DISTINCT FROM - Postgres

  2. Thoát khỏi hstore chứa các toán tử trong câu lệnh JDBC Prepared

  3. Có thể tắt xử lý báo giá trong lệnh Postgres COPY với định dạng CSV không?

  4. Làm cách nào để tự động đóng các kết nối không hoạt động trong PostgreSQL?

  5. PostgreSQL có cột giả như LEVEL trong Oracle không?