我只是自己跑過這個問題,這是我如何接近它。我創建了一個幫助函數,它遍歷數組,並使用 - >>操作符使用下標獲取文本值。如果有人知道更好的方法,我很高興聽到它,因爲這似乎有點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;
然後,你可以做這樣的事情:
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)
你也可以使函數只返回一個SETOF文本,如果你不想做處理直接數組:
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)
Err ...不是'「Fred說\」嗨。\「''只是另一種寫作方式'Fred說:」嗨。「」? –
你試過'json_each_text'而不是'json_array_elements'嗎? –
json_each_text使用鍵 - >值結構,我有一個JSON數組。 – Dan