Formattare i risultati delle query in formato JSON con FOR JSON (SQL Server)Format Query Results as JSON with FOR JSON (SQL Server)

QUESTO ARGOMENTO SI APPLICA A: sìSQL Server (a partire dalla versione 2016)sìDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

È possibile formattare i risultati delle query come JSON o esportare i dati da SQL Server in formato JSON aggiungendo la clausola FOR JSON a un'istruzione SELECT .Format query results as JSON, or export data from SQL Server as JSON, by adding the FOR JSON clause to a SELECT statement. Usare la clausola FOR JSON per semplificare le applicazioni client delegando la formattazione dell'output JSON dell'app a SQL ServerSQL Server.Use the FOR JSON clause to simplify client applications by delegating the formatting of JSON output from the app to SQL ServerSQL Server.

Quando si usa la clausola FOR JSON è possibile specificare la struttura dell'output JSON in modo esplicito o determinarla automaticamente in base alla struttura dell'istruzione SELECT.When you use the FOR JSON clause, you can specify the structure of the JSON output explicitly, or let the structure of the SELECT statement determine the output.

  • Usare FOR JSON PATH per mantenere il controllo completo sul formato dell'output JSON.To maintain full control over the format of the JSON output, use FOR JSON PATH. È possibile creare oggetti wrapper e annidare proprietà complesse.You can create wrapper objects and nest complex properties.

  • Usare FOR JSON AUTO per formattare l'output JSON automaticamente in base alla struttura dell'istruzione SELECT.To format the JSON output automatically based on the structure of the SELECT statement, use FOR JSON AUTO.

Di seguito è riportato un esempio di istruzione SELECT con la clausola FOR JSON e il relativo output.Here's an example of a SELECT statement with the FOR JSON clause and its output.

FOR JSONFOR JSON

Opzione 1 - Controllo dell'output con FOR JSON PATHOption 1 - You control output with FOR JSON PATH

In modalità PATH è possibile formattare l'output annidato usando la sintassi con il punto, ad esempio 'Item.Price' .In PATH mode, you can use the dot syntax – for example, 'Item.Price' – to format nested output.

Ecco una query di esempio che usa la modalità PATH con la clausola FOR JSON .Here's a sample query that uses PATH mode with the FOR JSON clause. L'esempio seguente usa anche l'opzione ROOT per specificare un elemento radice denominato.The following example also uses the ROOT option to specify a named root element.

Diagramma di flusso dell'output FOR JSONDiagram of flow of FOR JSON output

Altre informazioni su FOR JSON PATHMore info about FOR JSON PATH

Per ulteriori informazioni ed esempi, vedere formattare l'Output JSON annidato con modalità PATH ( SQL Server ) .For more detailed info and examples, see Format Nested JSON Output with PATH Mode (SQL Server).

Per la sintassi e l'uso, vedere Clausola FOR (Transact-SQL).For syntax and usage, see FOR Clause (Transact-SQL).

Opzione 2 - L'istruzione SELECT controlla l'output con FOR JSON AUTOOption 2 - SELECT statement controls output with FOR JSON AUTO

In modalità AUTO il formato dell'output JSON è determinato dalla struttura dell'istruzione SELECT.In AUTO mode, the structure of the SELECT statement determines the format of the JSON output.

Per impostazione predefinita, i valori null non vengono inclusi nell'output.By default, null values are not included in the output. È possibile usare INCLUDE_NULL_VALUES per modificare questo comportamento.You can use the INCLUDE_NULL_VALUES to change this behavior.

Ecco una query di esempio che usa la modalità AUTO con la clausola FOR JSON .Here's a sample query that uses AUTO mode with the FOR JSON clause.

Query:Query:

SELECT name, surname  
FROM emp  
FOR JSON AUTO  

RisultatiResults

[{
    "name": "John"
}, {
    "name": "Jane",
    "surname": "Doe"
}]

Altre informazioni su FOR JSON AUTOMore info about FOR JSON AUTO

Per ulteriori informazioni ed esempi, vedere formato JSON Output automaticamente con la modalità AUTO ( SQL Server ) .For more detailed info and examples, see Format JSON Output Automatically with AUTO Mode (SQL Server).

Per la sintassi e l'uso, vedere Clausola FOR (Transact-SQL).For syntax and usage, see FOR Clause (Transact-SQL).

Controllare altre opzioni di output JSONControl other JSON output options

Controllare l'output del FOR JSON clausola utilizzando le seguenti opzioni aggiuntive.Control the output of the FOR JSON clause by using the following additional options.

Output della clausola FOR JSONOutput of the FOR JSON clause

L'output della clausola FOR JSON ha le caratteristiche seguenti:The output of the FOR JSON clause has the following characteristics:

  1. Il set di risultati contiene un'unica colonna.The result set contains a single column.

    • Un set di risultati di piccole dimensioni può contenere un'unica riga.A small result set may contain a single row.
    • Un set di risultati di grandi dimensioni divide la stringa JSON lungo tra più righe.A large result set splits the long JSON string across multiple rows.

      • Per impostazione predefinita, SQL Server Management Studio (SSMS) consente di concatenare i risultati in una singola riga quando l'impostazione di output è risultati in formato griglia.By default, SQL Server Management Studio (SSMS) concatenates the results into a single row when the output setting is Results to Grid. La barra di stato di SQL Server Management Studio consente di visualizzare il conteggio delle righe effettivo.The SSMS status bar displays the actual row count.
      • Altre applicazioni client possono richiedere codice per trasformare i risultati di grandi dimensioni in un'unica stringa JSON valida concatenando i contenuti di più righe.Other client applications may require code to recombine lengthy results into a single, valid JSON string by concatenating the contents of multiple rows. Per un esempio di questo codice in un'applicazione c#, vedere usare per l'output JSON in un'app client c#.For an example of this code in a C# application, see Use FOR JSON output in a C# client app.

      Esempio di output FOR JSONExample of FOR JSON output

  2. I risultati vengono formattati sotto forma di matrice di oggetti JSON.The results are formatted as an array of JSON objects.

    • Il numero di elementi nella matrice JSON è uguale al numero di righe nei risultati dell'istruzione SELECT (prima di applicata la clausola FOR JSON).The number of elements in the JSON array is equal to the number of rows in the results of the SELECT statement (before the FOR JSON clause is applied).

    • Ogni riga nei risultati dell'istruzione SELECT (prima di applicata la clausola FOR JSON) diventa un oggetto JSON separato nella matrice.Each row in the results of the SELECT statement (before the FOR JSON clause is applied) becomes a separate JSON object in the array.

    • Ogni colonna nei risultati dell'istruzione SELECT (prima di FOR JSON clausola viene applicata) diventa una proprietà dell'oggetto JSON.Each column in the results of the SELECT statement (before the FOR JSON clause is applied) becomes a property of the JSON object.

  3. I nomi delle colonne e i valori corrispondenti vengono sottoposti a escape in base alla sintassi JSON.Both the names of columns and their values are escaped according to JSON syntax. Per altre informazioni, vedere How FOR JSON escapes special characters and control characters (SQL Server) (Sequenze di escape FOR JSON per i caratteri speciali e di controllo (SQL Server)).For more info, see How FOR JSON escapes special characters and control characters (SQL Server).

EsempioExample

Di seguito è riportato un esempio che illustra come FOR JSON clausola Formatta l'output JSON.Here's an example that demonstrates how the FOR JSON clause formats the JSON output.

Risultati queryQuery results

AA BB CC DD
1010 1111 1212 XX
2020 2121 2222 SY
3030 3131 3232 ZZ

Output JSONJSON output

[{
    "A": 10,
    "B": 11,
    "C": 12,
    "D": "X"
}, {
    "A": 20,
    "B": 21,
    "C": 22,
    "D": "Y"
}, {
    "A": 30,
    "B": 31,
    "C": 32,
    "D": "Z"
}] 

Per altre informazioni su quanto visualizzato nell'output della clausola FOR JSON , vedere gli argomenti seguenti.For more info about what you see in the output of the FOR JSON clause, see the following topics.

Acquisire familiarità con il supporto JSON integrato in SQL ServerLearn more about the built-in JSON support in SQL Server

Per un numero elevato di soluzioni specifiche, casi di utilizzo e indicazioni, vedere il post di blog sul supporto JSON predefinito in SQL Server e Database SQL di Azure per Microsoft Program Manager Jovan Popovic.For lots of specific solutions, use cases, and recommendations, see the blog posts about the built-in JSON support in SQL Server and in Azure SQL Database by Microsoft Program Manager Jovan Popovic.

Vedere ancheSee Also

Clausola FOR (Transact-SQL) FOR Clause (Transact-SQL)
Use FOR JSON output in SQL Server and in client apps (SQL Server) (Usare l'output FOR JSON in SQL Server e nelle app client (SQL Server))Use FOR JSON output in SQL Server and in client apps (SQL Server)