Dar formato a la salida JSON automáticamente con el modo AUTO

Aplicable a: SQL Server 2016 (13.x) y versiones posteriores Base de datos SQL de AzureInstancia administrada de SQL de AzureAzure Synapse Analytics (solo grupo de SQL sin servidor)Punto de conexión de análisis de SQL en Microsoft FabricAlmacén en Microsoft FabricBase de datos SQL en Microsoft Fabric

Para dar formato automáticamente a la salida de la cláusula FOR JSON en función de la estructura de la instrucción SELECT, especifica la opción AUTO.

Al especificar la AUTO opción, el formato de la salida JSON se determina automáticamente en función del orden de las columnas de la lista SELECT y sus tablas de origen. No se puede cambiar este formato.

Use la PATH opción si desea controlar la salida.

Una consulta que use la FOR JSON AUTO opción debe tener una FROM cláusula .

Estos son algunos ejemplos de la FOR JSON cláusula con la AUTO opción .

Nota:

La extensión MSSQL para Visual Studio Code puede dar formato automático a los resultados JSON (como se muestra en este artículo) en lugar de mostrar una cadena sin formato.

Examples

Los ejemplos de código de este artículo usan la base de datos de ejemplo de AdventureWorks2025 o AdventureWorksDW2025, que puede descargar de la página principal de Ejemplos de Microsoft SQL Server y proyectos de comunidad.

A. Dar formato a JSON desde una sola tabla

Cuando una consulta hace referencia solo a una tabla, los resultados de la FOR JSON AUTO cláusula son similares a los resultados de FOR JSON PATH. En este caso, FOR JSON AUTO no crea objetos anidados. La única diferencia es que FOR JSON AUTO genera alias separados por puntos (por ejemplo, Info.MiddleName en el ejemplo siguiente) como claves con puntos, no como objetos anidados.

SELECT TOP 5 BusinessEntityID AS Id,
             FirstName,
             LastName,
             Title AS 'Info.Title',
             MiddleName AS 'Info.MiddleName'
FROM Person.Person
FOR JSON AUTO;

Este es el conjunto de resultados.

[{
    "Id": 1,
    "FirstName": "Ken",
    "LastName": "Sánchez",
    "Info.MiddleName": "J"
}, {
    "Id": 2,
    "FirstName": "Terri",
    "LastName": "Duffy",
    "Info.MiddleName": "Lee"
}, {
    "Id": 3,
    "FirstName": "Roberto",
    "LastName": "Tamburello"
}, {
    "Id": 4,
    "FirstName": "Rob",
    "LastName": "Walters"
}, {
    "Id": 5,
    "FirstName": "Gail",
    "LastName": "Erickson",
    "Info.Title": "Ms.",
    "Info.MiddleName": "A"
}]

B. Formato JSON para tablas combinadas

Al unir tablas, las columnas de la primera tabla se generan como propiedades del objeto raíz. Las columnas de la segunda tabla se generan como propiedades de un objeto anidado. El nombre de tabla o alias de la segunda tabla (por ejemplo, D en el ejemplo siguiente) se usa como el nombre de la matriz anidada.

SELECT TOP 2 SalesOrderNumber,
             OrderDate,
             UnitPrice,
             OrderQty
FROM Sales.SalesOrderHeader AS H
     INNER JOIN Sales.SalesOrderDetail AS D
         ON H.SalesOrderID = D.SalesOrderID
FOR JSON AUTO;

Este es el conjunto de resultados.

[{
    "SalesOrderNumber": "SO43659",
    "OrderDate": "2011-05-31T00:00:00",
    "D": [{
        "UnitPrice": 24.99,
        "OrderQty": 1
    }]
}, {
    "SalesOrderNumber": "SO43659",
    "D": [{
        "UnitPrice": 34.40
    }, {
        "UnitPrice": 134.24,
        "OrderQty": 5
    }]
}]

C. Utiliza FOR JSON PATH para que coincida con la salida de AUTO

En lugar de utilizar FOR JSON AUTO, puedes anidar una subconsulta FOR JSON PATH en la instrucción SELECT, tal y como se muestra en el siguiente ejemplo. Este ejemplo produce el mismo resultado que el ejemplo anterior.

SELECT TOP 2 SalesOrderNumber,
             OrderDate,
             (SELECT UnitPrice,
                     OrderQty
              FROM Sales.SalesOrderDetail AS D
              WHERE H.SalesOrderID = D.SalesOrderID
              FOR JSON PATH) AS D
FROM Sales.SalesOrderHeader AS H
FOR JSON PATH;

Este es el conjunto de resultados.

[{
    "SalesOrderNumber": "SO43659",
    "OrderDate": "2011-05-31T00:00:00",
    "D": [{
        "UnitPrice": 24.99,
        "OrderQty": 1
    }]
}, {
    "SalesOrderNumber": "SO4390",
    "D": [{
        "UnitPrice": 24.99
    }]
}]

Más información sobre JSON en el motor de base de datos de SQL

Para obtener una introducción visual a la compatibilidad integrada con JSON, consulte JSON como un puente entre NoSQL y los mundos relacionales.