SELECT json_array_elements('["one", "two"]'::json)
dá resultado
| json_array_elements | | :------------------ | | "um" | | "dois" |
Eu gostaria de ter o mesmo, mas sem as aspas:
one
two
Parece que não posso usar ->>
aqui porque não tenho nomes de campos no JSON. É apenas um array de strings.
Versão do Postgres: PostgreSQL 10.0 em x86_64-apple-darwin, compilado por i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Baseado na Apple Inc. build 5658) (LLVM build 2336.11.00), 64- pedaço
Resultado:
A coerção padrão
json->text
sai com aspas duplas ("
) porque coagir detext
para umajson
string exige que você coloque aspas duplas em sua entrada. Para se livrar das aspas duplas, useTRIM
Ponto importante, porém, você perde alguma utilidade se fizer isso. Todos os tipos JSONB são retornados em um formato textual que pode ser usado para voltar
jsonb
com atext->jsonb
coerção. É uma função de mapeamento bijetivo. Perder isso significanull
e"null"
são os mesmos, como são1
e"1"
.Internos..
Se você quer saber o que está acontecendo. Todos os tipos podem fornecer um
_out
que os levatext
ou_send
que os leva à representação binária e uma recíproca_in
e_recv
que os leva dessas formas e os mapeia de volta aos tipos. Aqui você está recebendojsonb_out
,jsonb_out
que chamaJsonbToCstring
JsonbToCstring
que chamaJsonbToCStringWorker
JsonbToCStringWorker
que chamajsonb_put_escaped_value
jsonb_put_escaped_value(StringInfo out, JsonbValue *scalarVal)
que chamaescape_json
escape_json(StringInfo buf, const char *str)
que adiciona o"
e é codificado. Não há outro jeito.de se estiver usando jsonb em vez disso:
Você poderia usar
jsonb_array_elements
em vez disso:Resultado: