嵌套JSON的build_json_object问题

Mat*_*irl 5 postgresql json nested

我需要获取以下JSON对象作为输出:

"{"table" : "test", "column 1" : {"pos" : 1, "name" : "col1", "type" : "integer"}, 
"column 2" : {"pos" : 2, "name" : "col2", "type" : "date"}}"
Run Code Online (Sandbox Code Playgroud)

当我使用

build_json_object('table','test', 'column 1', build_json_object('pos',1,'name','col1','type','integer'), 'column 2', build_json_object('pos',2,'name','col2','type','date'));
Run Code Online (Sandbox Code Playgroud)

它引发错误:错误:函数build_json_object(未知,整数,未知,未知,未知,未知)不存在

当我使用

build_json_object('table','test', 'column 1',('pos',1,'name','col1','type','integer'), 'column 2', ('pos',2,'name','col2','type','date'));
Run Code Online (Sandbox Code Playgroud)

它只会产生错误的结果:

"{"table" : "test", "column 1" : {"f1":"pos", "f2": 1, "f3":"name", "f4": "col1", "f5":"type", "f6": "integer"}, 
    "column 2" : {"f1":"pos", "f2": 2, "f3":"name", "f4": "col2", "f5":"type", "f6": "date"}}"
Run Code Online (Sandbox Code Playgroud)

如何使用build_json_object函数生成嵌套的JSON对象?

kli*_*lin 5

提示-从嵌套最多的对象开始逐步构建表达式。使用适当的缩进。请注意,该表达式在某种程度上类似于结果。(我将主表达式包裹起来jsonb_pretty()以获得不错的输出):

select 
    jsonb_pretty(
        json_build_object(
            'table', 'test',
            'column 1', json_build_object('pos', 1, 'name', 'col1', 'type', 'integer'),
            'column 2', json_build_object('pos', 2, 'name', 'col2', 'type', 'date')
        )::jsonb
    );


       jsonb_pretty        
---------------------------
 {                        +
     "table": "test",     +
     "column 1": {        +
         "pos": 1,        +
         "name": "col1",  +
         "type": "integer"+
     },                   +
     "column 2": {        +
         "pos": 2,        +
         "name": "col2",  +
         "type": "date"   +
     }                    +
 }
(1 row)
Run Code Online (Sandbox Code Playgroud)