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