# JSON format choices

Choose a JSON format by its outer structure and whether values retain their JSON types or become strings.

## Layouts

| Format                                       | Shape                                                       |
| -------------------------------------------- | ----------------------------------------------------------- |
| `json_each_row`                              | One named object per row.                                   |
| `json_compact_each_row`                      | One positional array per row.                               |
| `json_columns`                               | One object containing named column arrays.                  |
| `json_compact_columns`                       | Positional column arrays.                                   |
| `json_strings_each_row`                      | Objects whose values are all JSON strings.                  |
| `json_compact_strings_each_row`              | Positional arrays whose values are all JSON strings.        |
| `json_compact_each_row_with_names_and_types` | Names and types header arrays followed by row arrays.       |
| `json_compact`                               | One output-only document with metadata and positional data. |

The string-only variants also encode SQL NULL as the quoted marker `"ᴺᵁᴸᴸ"`, rather than JSON null. Their input values must be JSON strings for known fields.

## Column-oriented example

```sql
SELECT 7 AS id, 'Ada' AS name
FORMAT json_columns;
```

```text
{
    "id": [7],
    "name": ["Ada"]
}
```

Choose [json_each_row](https://coordinatordb.com/docs/reference/formats/json/json-each-row) for a simple row stream, or browse the [format reference](https://coordinatordb.com/docs/reference/formats) for every supported layout and its settings.
