sql >> データベース >  >> RDS >> Mysql

mysqlネイティブjson関数を使用してネストされたjsonオブジェクトを生成するにはどうすればよいですか?

    これらのエラーが発生する理由は、親jsonオブジェクトが入力の1つとして結果セットを期待していないためです。{name、string}などの単純なオブジェクトペアが必要ですバグレポート-将来の機能で利用可能になる可能性があります ...これは、複数行の結果をコンマで区切られた結果の連結に変換してから、json配列に変換する必要があることを意味します。

    2番目の例でほぼ完了しました。

    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;
    

    これはほぼ機能し、サブクエリを文字列として扱い、エスケープ文字をそこに残します。

    '{\"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. 従業員はリモートで作業していますか?データを安全に保つ方法は次のとおりです。

    2. MySQLの列の一部の値に先行ゼロを追加する

    3. SQL Server:複数の行を1つの行に結合

    4. JDBCを使用してSQLServer2008データベースに接続するにはどうすればよいですか?