[json] Postgres : json 문자열을 텍스트로 변환하는 방법은 무엇입니까?

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


답변