Build Jsonb Array from Jsonb Field

Build Jsonb Array from Jsonb Field

I have column options with type jsonb , in format {"names": ["name1", "name2"]} which was created with

UPDATE table1 t1 SET options = (SELECT jsonb_build_object('names', names) FROM table2 t2 WHERE t2.id= t1.id)

and where names have type jsonb array.

SELECT jsonb_typeof(names) FROM table2 give array

Now I want to extract value of names as jsonb array. But query

SELECT jsonb_build_array(options->>'names') FROM table 

gave me ["[\"name1\", \"name2\"]"], while I expect ["name1", "name2"]

How can I get value in right format?

2 Answers

The ->> operator will return the value of the field (in your case, a JSON array) as a properly escaped text. What you are looking for is the -> operator instead.

However, note that using the jsonb_build_array on that will return an array containing your original array, which is probably not what you want either; simply using options->'names' should get you what you want.

Actually, you don't need to use jsonb_build_array() function.

Use select options -> 'names' from table; This will fix your issue.

jsonb_build_array() is for generating the array from jsonb object. You are following wrong way. That's why you are getting string like this ["[\"name1\", \"name2\"]"].

Try to execute this sample SQL script:

select j->'names'
from (
  select '{"names": ["name1", "name2"]}'::JSONB as j
) as a;

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Elena Rostova
Author

Elena Rostova

Elena Rostova holds a Master's degree in Public Health Journalism. She covers groundbreaking medical research, holistic wellness trends, mental health awareness, and nutritional science.