Json 값은 문자열 값으로 구성 될 수 있습니다. 예 :
postgres=# SELECT to_json('Some "text"'::TEXT);
to_json
-----------------
"Some \"text\""
해당 문자열을 postgres 텍스트 값으로 추출하려면 어떻게해야합니까?
::TEXT
작동하지 않습니다. 원래 문자열이 아닌 인용 된 json을 반환합니다.
postgres=# SELECT to_json('Some "text"'::TEXT)::TEXT;
to_json
-----------------
"Some \"text\""
감사.
PS PostgreSQL 9.3을 사용하고 있습니다.
답변
PostgreSQL에서는 스칼라 JSON 객체를 분해 할 방법이 없습니다. 따라서 지적했듯이
select length(to_json('Some "text"'::TEXT) ::TEXT);
15입니다.
트릭은 JSON을 하나의 JSON 요소의 배열로 변환 한 다음 ->>
.
select length( array_to_json(array[to_json('Some "text"'::TEXT)])->>0 );
11을 반환합니다.
답변
9.4.4에서 #>>
연산자를 사용하면 나를 위해 작동합니다.
select to_json('test'::text) #>> '{}';
테이블 열과 함께 사용하려면 :
select jsoncol #>> '{}' from mytable;
답변
큐리어스 씨도 이것에 대해 궁금했습니다. #>> '{}'
연산자 외에도 9.6 이상 에서는 연산자를 사용하여 jsonb 문자열의 값을 가져올 수 있습니다 ->>
.
select to_jsonb('Some "text"'::TEXT)->>0;
?column?
-------------
Some "text"
(1 row)
json 값이있는 경우 솔루션은 먼저 jsonb로 캐스트하는 것입니다.
select to_json('Some "text"'::TEXT)::jsonb->>0;
?column?
-------------
Some "text"
(1 row)
답변
이 작업을 수행하는 쉬운 방법 :
SELECT ('[' || to_json('Some "text"'::TEXT) || ']')::json ->> 0;
json 문자열을 json 목록으로 변환하십시오.
답변
->> 나를 위해 작동합니다.
postgres 버전 :
<postgres.version>11.6</postgres.version>
질문:
select object_details->'valuationDate' as asofJson, object_details->>'valuationDate' as asofText from MyJsonbTable;
산출:
asofJson asofText
"2020-06-26" 2020-06-26
"2020-06-25" 2020-06-25
"2020-06-25" 2020-06-25
"2020-06-25" 2020-06-25