SELECT json_array_elements('["one", "two"]'::json)
結果を出す
| json_array_elements | | :--------------- | 「1つ」| | 「2つ」|
私は同じですが引用符なしにしたいと思います:
one
two
使用できないようです---(->>
ここには、JSONにフィールド名がないためです。それは単なる文字列の配列です。
Postgresバージョン:x86_64-Apple-darwin上のPostgreSQL 10.0、i686-Apple-darwin11-llvm-gcc-4.2(GCC)4.2.1によってコンパイル済み(Apple Inc. build 5658に基づく)( LLVMビルド2336.11.00)、64ビット
text
からjson
文字列に強制変換するには、入力を二重引用符で囲む必要があるため、デフォルトの_json->text
_強制変換は二重引用符(_"
_)で出力されます。二重引用符を取り除くには、TRIM
を使用します
_SELECT x, trim('"' FROM x::text)
FROM json_array_elements('["one", "two"]'::json) AS t(x);
x | btrim
-------+-------
"one" | one
"two" | two
(2 rows)
_
重要なポイントですが、それを行うと一部のユーティリティが失われます。すべてのJSONBタイプは、_text->jsonb
_強制を使用してjsonb
に戻るために使用できるテキスト形式で返されます。これは全単射マッピング関数です。つまり、null
と_"null"
_は同じであり、_1
_と_"1"
_も同じです。
_SELECT x, trim('"' FROM x::text)
FROM json_array_elements('[null, "null", 1, "1"]') AS t(x);
x | btrim
--------+-------
null | null
"null" | null
1 | 1
"1" | 1
(4 rows)
_
何が起こっているのか知りたい場合。すべての型は、それらをtext
に変換する__out
_またはバイナリ表現に変換する__send
_と、それらを取得する相互__in
_および__recv
_を提供できます。それらのフォームとマップをタイプに戻します。ここでは_jsonb_out
_を取得しています。
jsonb_out
_ which calls JsonbToCstring
JsonbToCstring
which calls JsonbToCStringWorker
JsonbToCStringWorker
which calls _jsonb_put_escaped_value
_jsonb_put_escaped_value(StringInfo out, JsonbValue *scalarVal)
which calls _escape_json
_escape_json(StringInfo buf, const char *str)
which _"
_ を追加すると、ハードコードされます。 他に方法はありません。SELECT value#>>'{}' as col FROM json_array_elements('["one", "two"]'::json);
結果:
col
---
one
two