@ARRAY Directive

The @array directive can be used to explicitly shape the nested object as an array.

The directive @array takes no arguments.

SELECT JSON_SERIALIZE(data PRETTY) AS data FROM GRAPHQL('
    query {
        driver {
            driverId: driver_id
            driverName: name
            driverPoints: points
            teamDetails: team @array {
                teamId: team_id
                teamName: name
                teamPoints: points
            }
        }
    }
');

The preceding example explicitly defines that the fields teamID, teamName and teamPoints must be part of an array in the output:

DATA
--------------------------------------------------------------------------------
{
  "driverId" : 101,
  "driverName" : "Lando Norris",
  "driverPoints" : 282,
  "teamDetails" :
  [
    {
      "teamId" : 301,
      "teamName" : "McLaren Mercedes",
      "teamPoints" : 666
    }
  ]
}

{
  "driverId" : 102,
  "driverName" : "Oscar Piastri",
  "driverPoints" : 384,
  "teamDetails" :
  [
    {
      "teamId" : 301,
      "teamName" : "McLaren Mercedes",
      "teamPoints" : 666
    }
  ]
}
.................................
.................................
20 rows selected.

As an alternative to @array directive, you can also use square brackets to enclose the fields which must be part of an array. So the following example would still produce the same output as using the @array directive:

SELECT JSON_SERIALIZE(data PRETTY) AS data FROM GRAPHQL('
    query {
        driver {
            driverId: driver_id
            driverName: name
            driverPoints: points
            teamDetails: team
            [
                {
                    teamId: team_id
                    teamName: name
                    teamPoints: points
                }
            ]
        }
    }
');