2016-07-13 8 views
2

мне нужно получить следующий объект JSON в качестве вывода:build_json_object проблеме с вложенной JSON

"{"table" : "test", "column 1" : {"pos" : 1, "name" : "col1", "type" : "integer"}, 
"column 2" : {"pos" : 2, "name" : "col2", "type" : "date"}}" 

Когда я использую

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')); 

он выдает ошибку: ОШИБКИ: функция build_json_object (неизвестно, целое, неизвестное, неизвестное, неизвестное, неизвестное) не существует

когда я использую

build_json_object('table','test', 'column 1',('pos',1,'name','col1','type','integer'), 'column 2', ('pos',2,'name','col2','type','date')); 

он просто дает неверный результат:

"{"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"}}" 

Как генерировать вложенный объект JSON с функцией build_json_object?

ответ

3

Подсказка - постройте выражение шаг за шагом, начиная с самых вложенных объектов. Используйте правильные отступы. Обратите внимание, что выражение как-то похоже на результат. (я завернул главное выражение с 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) 
+0

Отлично, это работает! Большое спасибо. Похоже, что изменение build_json_object в json_build_object действительно имеет значение. – MaterialGirl

+0

Только теперь я заметил, что ваша первая попытка была в порядке, за исключением имени функции. Это потому, что в принципе я не читаю тексты, которые не помещаются на странице;) Используйте отступы! – klin

Смежные вопросы