Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да генерирам вложени json обекти, използвайки собствени json функции на mysql?

Причината да получавате тези грешки е, че родителският json обект не очаква набор от резултати като един от входните си данни, трябва да имате прости двойки обекти като {name, string} и т.н. отчет за грешка - може да бъде наличен в бъдеща функционалност ... това просто означава, че трябва да конвертирате вашите многоредови резултати в конкатинация на резултати, разделени със запетаи и след това преобразувани в json масив.

Почти го разбрахте с втория си пример.

Можете да постигнете това, което търсите с функцията GROUP_CONCAT

select json_object(
  'id',p.id 
 ,'desc',p.`desc`
 ,'child_objects',json_array(
                     (select GROUP_CONCAT(
                                 json_object('id',id,'parent_id',parent_id,'desc',`desc`)
                             )   
                      from child_table 
                      where parent_id = p.id))
                   )
 from parent_table p;

Това почти работи, в крайна сметка третира подзаявката като низ, който оставя escape знаците там.

'{\"id\": 1, 
\"desc\": \"parent row 1\", 
\"child_objects\": 
    [\"
    {\\\"id\\\": 1,
     \\\"desc\\\": \\\"child row 1\\\", 
    \\\"parent_id\\\": 1
    },
    {\\\"id\\\": 2, 
    \\\"desc\\\": \\\"child row 2\\\", 
    \\\"parent_id\\\": 1}\"
    ]
}'

За да накарате това да работи в подходящ формат, трябва да промените начина, по който създавате JSON изхода, както следва:

select json_object(
  'id',p.id 
 ,'desc',p.`desc`
 ,'child_objects',(select CAST(CONCAT('[',
                GROUP_CONCAT(
                  JSON_OBJECT(
                    'id',id,'parent_id',parent_id,'desc',`desc`)),
                ']')
         AS JSON) from child_table where parent_id = p.id)

 ) from parent_table p;

Това ще ви даде точния резултат, от който се нуждаете:

'{\"id\": 1, 
\"desc\": \"parent row 1\", 
\"child_objects\": 
    [{\"id\": 1, 
    \"desc\": \"child row 1\", 
    \"parent_id\": 1
    }, 
    {\"id\": 2, 
    \"desc\": \"child row 2\", 
    \"parent_id\": 1
    }]  
}'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:Какво е по подразбиране Подреждане по на заявките?

  2. Групово максимум

  3. Вмъкване на данни в MySQL база данни

  4. MyCLI – MySQL/MariaDB клиент с автоматично довършване и подчертаване на синтаксиса

  5. Активирайте поддръжката на MySQL InnoDB Storage Engine в инсталацията на XAMPP