在row_to_json函数中选择查询

17 sql postgresql json composite-types postgresql-9.2

例如,我用下面的函数转换rowsjsonPostgreSQL 9.2

select row_to_json(row(productid, product)) from gtab04;
Run Code Online (Sandbox Code Playgroud)

这将返回结果以下

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"}
Run Code Online (Sandbox Code Playgroud)
  • 不幸的是,它丢失了字段名称并用f1,f2,f3等替换它们.
  • 如何获取实际字段名称或投射字段名称?

Viv*_* S. 24

要解决此问题,我们必须创建一个行类型并将行转换为该类型或使用子查询.子查询通常会更容易.

select row_to_json(t)
from (
   select productid, product from gtab04
) t
Run Code Online (Sandbox Code Playgroud)


Tim*_*Tim 9

如果想要阻止子查询,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"}
Run Code Online (Sandbox Code Playgroud)

在 DB Fiddle 上查看