sql >> Databasteknik >  >> RDS >> Mysql

Hur genererar jag kapslade json-objekt med inbyggda mysql-json-funktioner?

Anledningen till att du får dessa fel är att det överordnade json-objektet inte förväntar sig en resultatuppsättning som en av dess ingångar, du måste ha enkla objektpar som {name, string} etc felrapport – kan vara tillgänglig i framtida funktioner ... det här betyder bara att du behöver konvertera dina resultat med flera rader till en konkatinering av resultat separerade med kommatecken och sedan omvandlas till en json-array.

Du hade det nästan med ditt andra exempel.

Du kan uppnå det du är ute efter med GROUP_CONCAT-funktionen

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;

Detta fungerar nästan, det slutar med att underfrågan behandlas som en sträng som lämnar escape-tecknen där.

'{\"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}\"
    ]
}'

För att få detta att fungera i ett lämpligt format måste du ändra sättet du skapar JSON-utdata på enligt följande:

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;

Detta ger dig det exakta resultatet du behöver:

'{\"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. Hur man väljer kapslad JSON i SQL Server med OPENJSON

  2. Spring Boot Query-anteckning med nativeQuery fungerar inte i Postgresql

  3. Oracle till Excel - PL/SQL exportprocedur

  4. Ta bort ett databaspostkonto (SSMS)