web-dev-qa-db-ja.com

row_to_json関数でクエリを選択します

たとえば、次の関数を使用して、PostgreSQL 9.2rowsjsonに変換します。

select row_to_json(row(productid, product)) from gtab04;

これは以下の結果を返します

row_to_json
---------------
{"f1":3029,"f2":"DIBIZIDE M TAB"}
{"f1":3026,"f2":"MELMET 1000 SR TAB"}
{"f1":2715,"f2":"GLUCORED FORTE"}
{"f1":3377,"f2":"AZINDICA 500 TAB"}
  • 残念ながら、フィールド名は失われ、f1、f2、f3などに置き換えられます。
  • 実際のフィールド名またはキャストフィールド名を取得するにはどうすればよいですか?
18
user3814846

これを回避するには、行タイプを作成してそのタイプに行をキャストするか、サブクエリを使用する必要があります。通常、サブクエリの方が簡単です。

select row_to_json(t)
from (
   select productid, product from gtab04
) t
25
Vivek S.

サブクエリを防ぎたい場合は、json_build_object()が解決策になる可能性があります。列名はマップされませんが、JSONキーを明示的に設定しましょう。


クエリ

SELECT json_build_object('productid', productid, 'product', product) FROM gtab04;

json_build_object                                
------------------
{"productid":3029,"product":"DIBIZIDE M TAB"}
{"productid":3026,"product":"MELMET 1000 SR TAB"}
{"productid":2715,"product":"GLUCORED FORTE"}  
{"productid":3377,"product":"AZINDICA 500 TAB"}

DBフィドルで表示

4
Tim