O valor Json pode consistir em um valor de string. por exemplo.:
postgres=# SELECT to_json('Some "text"'::TEXT);
to_json
-----------------
"Some \"text\""
Como posso extrair essa string como um valor de texto postgres?
::TEXT
não funciona. Ele retorna json entre aspas, não a string original:
postgres=# SELECT to_json('Some "text"'::TEXT)::TEXT;
to_json
-----------------
"Some \"text\""
Obrigado.
PS Estou usando PostgreSQL 9.3
json
postgresql
E79ene
fonte
fonte
Respostas:
Não há como no PostgreSQL desconstruir um objeto JSON escalar. Assim, como você aponta,
é 15,
O truque é converter o JSON em uma matriz de um elemento JSON e, em seguida, extrair esse elemento usando
->>
.retornará 11.
fonte
json_extract_path_text()
não possa fazer referência ao elemento raiz (AFAIK).from_json
foi proposta, mas não implementada wiki.postgresql.org/wiki/JSON_API_BrainstormEm 9.4.4, usar o
#>>
operador funciona para mim:Para usar com uma coluna de tabela:
fonte
to_json(...)
é simplesmente uma maneira fácil de criar um valor JSON para trabalhar como exemplo em uma instrução curta de uma linha. Certamente você o substituiria pelo nome de uma coluna JSON se estivesse consultando uma tabela conforme descreve. Além disso, para esclarecer um ponto de confusão potencial, seu elenco(...)::text
é redundante, pois o#>>
operador retorna texto por definição (e é a razão para usar o operador em primeiro lugar). Você pode manter os parênteses, mas descartar o gesso::text
.#>>
e o que'{}'
está fazendo? Eu não consigo entender isso e nenhum dos termos é amigável ao Google. Essa resposta resolveu meu problema, só quero saber por quê.#>>
operador está aqui .text
. Pode parecer uma string, mas é um objeto JSON. Para converter esse objeto de JSON em texto, use o#>>
operador. Mas esse operador precisa que você especifique um caminho. O caminho para esse objeto raiz é{}
. IssoSELECT '"test"'::jsonb #>> '{}'
significa "pegar o objeto no caminho da raiz e convertê-lo em texto".O Sr. Curioso também estava curioso sobre isso. Além do
#>> '{}'
operador, em 9.6+ pode-se obter o valor de uma string jsonb com o->>
operador:Se um tiver um valor json, a solução é converter primeiro em jsonb:
fonte
- >> funciona para mim.
versão postgres:
Inquerir:
Resultado:
fonte
Uma maneira fácil de fazer isso:
Basta converter a string json em uma lista json
fonte