> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Documentation sur le format JSON

# JSON

| Entrée | Sortie | Alias |
| - | - | - |
| ✔ | ✔ | |

## Description

Le format `JSON` lit et produit des données au format JSON.

Le format `JSON` renvoie les éléments suivants :

| Parameter | Description |
| - | - |
| `meta` | Noms et types des colonnes. |
| `data` | Tables de données |
| `rows` | Le nombre total de lignes en sortie. |
| `rows_before_limit_at_least` | L'estimation minimale du nombre de lignes qu'il y aurait eu sans LIMIT. N'est renvoyée que si la requête contient LIMIT. Cette estimation est calculée à partir des blocs de données traités dans le pipeline d'exécution de la requête avant la transformation de limite, mais ceux-ci peuvent ensuite être écartés par cette transformation. Si les blocs n'atteignent même pas la transformation de limite dans le pipeline d'exécution de la requête, ils ne sont pas pris en compte dans l'estimation. |
| `statistics` | Des statistiques telles que `elapsed`, `rows_read`, `bytes_read`. |
| `totals` | Valeurs totales (lors de l'utilisation de WITH TOTALS). |
| `extremes` | Valeurs extrêmes (lorsque `extremes` est défini sur 1). |

Le type `JSON` est compatible avec JavaScript. Pour garantir cette compatibilité, certains caractères sont en outre échappés :

* la barre oblique `/` est échappée en `\/`
* les séparateurs de ligne alternatifs `U+2028` et `U+2029`, qui posent problème dans certains navigateurs, sont échappés en `\uXXXX`.
* les caractères de contrôle ASCII sont échappés : retour arrière, saut de page, saut de ligne, retour chariot et tabulation horizontale sont remplacés par `\b`, `\f`, `\n`, `\r`, `\t`, et les octets restants dans la plage 00-1F le sont à l'aide de séquences `\uXXXX`.
* les séquences UTF-8 invalides sont remplacées par le caractère de remplacement � afin que le texte en sortie soit composé de séquences UTF-8 valides.

Les entiers de 64 bits ou plus (comme `Int64`, `UInt64` ou `Int128`) sont, par défaut, produits sans guillemets.
Pour assurer la compatibilité avec JavaScript, vous pouvez les entourer de guillemets doubles en définissant le paramètre de configuration [`output_format_json_quote_64bit_integers`](https://clickhouse.com/docs/fr/reference/settings/formats/output-format#output_format_json_quote_64bit_integers) sur `1`.

ClickHouse prend en charge [NULL](https://clickhouse.com/docs/fr/reference/syntax.md), qui s'affiche sous la forme `null` dans la sortie JSON. Pour activer les valeurs `+nan`, `-nan`, `+inf`, `-inf` dans la sortie, définissez [output\_format\_json\_quote\_denormals](https://clickhouse.com/docs/fr/reference/settings/formats/output-format.md#output_format_json_quote_denormals) sur `1`.

## Exemple d’utilisation

Exemple :

```sql theme={null}
SELECT SearchPhrase, count() AS c FROM test.hits GROUP BY SearchPhrase WITH TOTALS ORDER BY c DESC LIMIT 5 FORMAT JSON
```

```json theme={null}
{
        "meta":
        [
                {
                        "name": "num",
                        "type": "Int32"
                },
                {
                        "name": "str",
                        "type": "String"
                },
                {
                        "name": "arr",
                        "type": "Array(UInt8)"
                }
        ],

        "data":
        [
                {
                        "num": 42,
                        "str": "hello",
                        "arr": [0,1]
                },
                {
                        "num": 43,
                        "str": "hello",
                        "arr": [0,1,2]
                },
                {
                        "num": 44,
                        "str": "hello",
                        "arr": [0,1,2,3]
                }
        ],

        "rows": 3,

        "rows_before_limit_at_least": 3,

        "statistics":
        {
                "elapsed": 0.001137687,
                "rows_read": 3,
                "bytes_read": 24
        }
}
```

## Paramètres de format

Pour le format d'entrée JSON, si le paramètre [`input_format_json_validate_types_from_metadata`](https://clickhouse.com/docs/fr/reference/settings/formats/input-format#input_format_json_validate_types_from_metadata) est défini sur `1`,
les types issus des métadonnées des données d'entrée seront comparés aux types des colonnes correspondantes de la table.

## Voir aussi

* format [JSONEachRow](https://clickhouse.com/docs/fr/reference/formats/JSON/JSONEachRow.md)
* réglage [output\_format\_json\_array\_of\_rows](https://clickhouse.com/docs/fr/reference/settings/formats/output-format.md#output_format_json_array_of_rows)
