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\""
ありがとう。
追伸PostgreSQL 9.3を使用しています
PostgreSQLには、スカラーJSONオブジェクトを分解する方法はありません。したがって、あなたが指摘するように、
select length(to_json('Some "text"'::TEXT) ::TEXT);
15
トリックは、JSONを1つの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;
これを行う簡単な方法:
SELECT ('[' || to_json('Some "text"'::TEXT) || ']')::json ->> 0;
JSON文字列をJSONリストに変換するだけです