テキスト(またはvarchar)をPostgres(バージョン9.6)のjsonB
タイプに変換する適切な方法は何ですか?テキストをjsonBに変換するには
方法1:
dev=# select '[{"field":15,"operator":0,"value":"1"},{"field":15,"operator":0,"value":"2"},55]'::jsonb;
jsonb
----------------------------------------------------------------------------------------------
[{"field": 15, "value": "1", "operator": 0}, {"field": 15, "value": "2", "operator": 0}, 55]
(1 row)
ところで、所望の結果を生成しない方法2:
ここで私は2つの方法を使用していると私は異なる結果を取得しています。例えば、
dev=# select to_jsonb('[{"field":15,"operator":0,"value":"1"},{"field":15,"operator":0,"value":"2"},55]'::text);
to_jsonb
----------------------------------------------------------------------------------------------------
"[{\"field\":15,\"operator\":0,\"value\":\"1\"},{\"field\":15,\"operator\":0,\"value\":\"2\"},55]"
(1 row)
dev=#
ここでは、配列ではなく文字列に変換されました。 2番目のメソッドが配列を作成しないのはなぜですか? Postgres documentationによると
さて、あなたは 'json'についてではなく、' jsonb'について話しています。また、あなたの例で(フレッドはこんにちは)私は間違った結果を得る。そして、私は "データ型が組み込まれていない場合"の部分を理解していません、 ':: text'と' text'を組み込んでいます。私の入力を ':: text'に変換するもの、または' :: text'を構文解析して 'json'オブジェクトを生成するものです。 Postgresのドキュメントはうまくいっていません。 – Nulik
はい、申し訳ありませんが、私は9.3バージョンのドキュメントを見ましたが、実際は結果は同じです。 – McNets
'json'文字列に何が含まれているのかわからないので、配列にキャストできません。連想配列を使用する場合はどうなりますか? 9.6バージョンでは、私のクエリは異なる結果を生み出しています。だから私は、 'to_jsonb()'関数を使って正しく解析された 'jsonb'オブジェクトを受け取ると思っていたので、これは当てはまりません。 – Nulik