PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL unescape JSON स्ट्रिंग

मैं बस इस मुद्दे पर खुद भागा, और यहां बताया गया है कि मैंने इससे कैसे संपर्क किया। मैंने एक सहायक फ़ंक्शन बनाया है जो सरणी पर पुनरावृत्त करता है और टेक्स्ट मान वापस पाने के लिए एक सबस्क्रिप्ट का उपयोग करके ->> ऑपरेटर का उपयोग करता है। अगर कोई बेहतर तरीका जानता है, तो मुझे इसके बारे में सुनकर खुशी हुई, क्योंकि यह थोड़ा भद्दा लगता है।

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,"the\"re",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.\"" ,"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. अनुक्रमिक अनुक्रमणिका के लिए भरण कारक जो PK है

  2. PostgreSQL में XML फ़ाइलें आयात करें

  3. पंक्तियों के बीच समय अंतर का योग

  4. c3p0 के साथ हाइबरनेट:createClob () अभी तक लागू नहीं किया गया है

  5. मैं रेल पर रूबी में एक क्वेरी कैसे बना सकता हूं जो केवल एक has_many संबंध के अधिकतम में शामिल होता है और उस संबंध पर एक चुनिंदा फ़िल्टर शामिल करता है?