> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> JSONObjectEachRowフォーマットに関するドキュメント

# JSONObjectEachRow

| 入力 | 出力 | エイリアス |
| -- | -- | ----- |
| ✔  | ✔  |       |

<div id="description">
  ## 説明
</div>

このフォーマットでは、すべてのデータが1つのJSONオブジェクトとして表現され、各行は [`JSONEachRow`](/ja/reference/formats/JSON/JSONEachRow) フォーマットと同様に、そのオブジェクト内の個別のフィールドとして表されます。

<div id="example-usage">
  ## 使用例
</div>

<div id="basic-example">
  ### 基本例
</div>

次の JSON があるとします。

```json theme={null}
{
  "row_1": {"num": 42, "str": "hello", "arr":  [0,1]},
  "row_2": {"num": 43, "str": "hello", "arr":  [0,1,2]},
  "row_3": {"num": 44, "str": "hello", "arr":  [0,1,2,3]}
}
```

オブジェクト名をカラムの値として使用するには、特別な設定 [`format_json_object_each_row_column_for_object_name`](/ja/reference/settings/formats#format_json_object_each_row_column_for_object_name) を使用できます。
この設定の値にはカラム名を指定します。指定したカラム名は、生成されるオブジェクト内で各行の JSON キーとして使用されます。

<div id="output">
  #### 出力
</div>

`test` というテーブルに 2 つのカラムがあるとしましょう。

```text theme={null}
┌─object_name─┬─number─┐
│ first_obj   │      1 │
│ second_obj  │      2 │
│ third_obj   │      3 │
└─────────────┴────────┘
```

`JSONObjectEachRow` フォーマットで出力し、`format_json_object_each_row_column_for_object_name` 設定を使用します。

```sql title="Query" theme={null}
SELECT * FROM test SETTINGS format_json_object_each_row_column_for_object_name='object_name'
```

```json title="Response" theme={null}
{
    "first_obj": {"number": 1},
    "second_obj": {"number": 2},
    "third_obj": {"number": 3}
}
```

<div id="input">
  #### 入力
</div>

前の例の出力を `data.json` という名前のファイルに保存したとします：

```sql title="Query" theme={null}
SELECT * FROM file('data.json', JSONObjectEachRow, 'object_name String, number UInt64') SETTINGS format_json_object_each_row_column_for_object_name='object_name'
```

```response title="Response" theme={null}
┌─object_name─┬─number─┐
│ first_obj   │      1 │
│ second_obj  │      2 │
│ third_obj   │      3 │
└─────────────┴────────┘
```

スキーマ推論にも利用できます:

```sql title="Query" theme={null}
DESCRIBE file('data.json', JSONObjectEachRow) SETTING format_json_object_each_row_column_for_object_name='object_name'
```

```response title="Response" theme={null}
┌─name────────┬─type────────────┐
│ object_name │ String          │
│ number      │ Nullable(Int64) │
└─────────────┴─────────────────┘
```

<div id="json-inserting-data">
  ### データの挿入
</div>

```sql title="Query" theme={null}
INSERT INTO UserActivity FORMAT JSONEachRow {"PageViews":5, "UserID":"4324182021466249494", "Duration":146,"Sign":-1} {"UserID":"4324182021466249494","PageViews":6,"Duration":185,"Sign":1}
```

ClickHouse では次のことが可能です。

* オブジェクト内のキー・バリューのペアは、どのような順序でも指定できます。
* 一部の値は省略できます。

ClickHouse は、要素間の空白やオブジェクトの後のカンマを無視します。すべてのオブジェクトを1行で渡すこともできます。改行で区切る必要はありません。

<div id="omitted-values-processing">
  #### 省略された値の処理
</div>

ClickHouse は、省略された値を対応する[データ型](/ja/reference/data-types/index)のデフォルト値に置き換えます。

`DEFAULT expr` が指定されている場合、ClickHouse は [input\_format\_defaults\_for\_omitted\_fields](/ja/reference/settings/formats#input_format_defaults_for_omitted_fields) 設定に応じて、異なる置き換えルールを使用します。

次のテーブルを考えます。

```sql title="Query" theme={null}
CREATE TABLE IF NOT EXISTS example_table
(
    x UInt32,
    a DEFAULT x * 2
) ENGINE = Memory;
```

* `input_format_defaults_for_omitted_fields = 0` の場合、`x` と `a` のデフォルト値はいずれも `0` です (`UInt32` データ型のデフォルト値) 。
* `input_format_defaults_for_omitted_fields = 1` の場合、`x` のデフォルト値は `0` ですが、`a` のデフォルト値は `x * 2` になります。

<Note>
  `input_format_defaults_for_omitted_fields = 1` でデータを挿入する場合、`input_format_defaults_for_omitted_fields = 0` の場合に比べて、ClickHouse はより多くの計算リソースを消費します。
</Note>

<div id="json-selecting-data">
  ### データの取得
</div>

例として、`UserActivity`テーブルを見てみましょう。

```response theme={null}
┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┐
│ 4324182021466249494 │         5 │      146 │   -1 │
│ 4324182021466249494 │         6 │      185 │    1 │
└─────────────────────┴───────────┴──────────┴──────┘
```

クエリ `SELECT * FROM UserActivity FORMAT JSONEachRow` は次の結果を返します。

```response theme={null}
{"UserID":"4324182021466249494","PageViews":5,"Duration":146,"Sign":-1}
{"UserID":"4324182021466249494","PageViews":6,"Duration":185,"Sign":1}
```

[JSON](/ja/reference/formats/JSON/JSON) フォーマットとは異なり、無効な UTF-8 シーケンスは置換されません。値は `JSON` と同じ方法でエスケープされます。

<Info>
  文字列には任意のバイト列を出力できます。テーブル内のデータを情報を失うことなく JSON としてフォーマットできることが確実な場合は、[`JSONEachRow`](/ja/reference/formats/JSON/JSONEachRow) フォーマットを使用してください。
</Info>

<div id="jsoneachrow-nested">
  ### Nested 構造の使用
</div>

[`Nested`](/ja/reference/data-types/nested-data-structures/index) データ型のカラムを持つテーブルがある場合、同じ構造の JSON データを挿入できます。この機能は、[input\_format\_import\_nested\_json](/ja/reference/settings/formats#input_format_import_nested_json) 設定を有効にすることで使用できます。

たとえば、次のテーブルを考えてみましょう。

```sql title="Query" theme={null}
CREATE TABLE json_each_row_nested (n Nested (s String, i Int32) ) ENGINE = Memory
```

`Nested` データ型の説明にあるとおり、ClickHouse ではネスト構造の各要素を個別のカラム (このテーブルでは `n.s` と `n.i`) として扱います。データは次のように挿入できます。

```sql title="Query" theme={null}
INSERT INTO json_each_row_nested FORMAT JSONEachRow {"n.s": ["abc", "def"], "n.i": [1, 23]}
```

階層的なJSONオブジェクトとしてデータを挿入するには、[`input_format_import_nested_json=1`](/ja/reference/settings/formats#input_format_import_nested_json)を設定します。

```json theme={null}
{
    "n": {
        "s": ["abc", "def"],
        "i": [1, 23]
    }
}
```

この設定がない場合、ClickHouse は例外をスローします。

```sql title="Query" theme={null}
SELECT name, value FROM system.settings WHERE name = 'input_format_import_nested_json'
```

```response title="Response" theme={null}
┌─name────────────────────────────┬─value─┐
│ input_format_import_nested_json │ 0     │
└─────────────────────────────────┴───────┘
```

```sql title="Query" theme={null}
INSERT INTO json_each_row_nested FORMAT JSONEachRow {"n": {"s": ["abc", "def"], "i": [1, 23]}}
```

```response title="Response" theme={null}
Code: 117. DB::Exception: Unknown field found while parsing JSONEachRow format: n: (at row 1)
```

```sql title="Query" theme={null}
SET input_format_import_nested_json=1
INSERT INTO json_each_row_nested FORMAT JSONEachRow {"n": {"s": ["abc", "def"], "i": [1, 23]}}
SELECT * FROM json_each_row_nested
```

```response title="Response" theme={null}
┌─n.s───────────┬─n.i────┐
│ ['abc','def'] │ [1,23] │
└───────────────┴────────┘
```

<div id="format-settings">
  ## フォーマット設定
</div>

| 設定                                                                                                                                                                | 説明                                                                                                                               | デフォルト    | 注記                                                                                                                                                 |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`input_format_import_nested_json`](/ja/reference/settings/formats#input_format_import_nested_json)                                                               | ネストされたJSONデータをネストされたテーブルにマッピングします (JSONEachRowフォーマットで機能します) 。                                                                    | `false`  |                                                                                                                                                    |
| [`input_format_json_read_bools_as_numbers`](/ja/reference/settings/formats#input_format_json_read_bools_as_numbers)                                               | JSON入力フォーマットで、Bool値を数値として解析できるようにします。                                                                                            | `true`   |                                                                                                                                                    |
| [`input_format_json_read_bools_as_strings`](/ja/reference/settings/formats#input_format_json_read_bools_as_strings)                                               | JSON入力フォーマットで、bool値を文字列として解析できるようにします。                                                                                           | `true`   |                                                                                                                                                    |
| [`input_format_json_read_numbers_as_strings`](/ja/reference/settings/formats#input_format_json_read_numbers_as_strings)                                           | JSON入力フォーマットで、数値を文字列として解析できるようにします。                                                                                              | `true`   |                                                                                                                                                    |
| [`input_format_json_read_arrays_as_strings`](/ja/reference/settings/formats#input_format_json_read_arrays_as_strings)                                             | JSON入力フォーマットで、JSON配列を文字列として解析できるようにします。                                                                                          | `true`   |                                                                                                                                                    |
| [`input_format_json_read_objects_as_strings`](/ja/reference/settings/formats#input_format_json_read_objects_as_strings)                                           | JSON入力フォーマットで、JSONオブジェクトを文字列として解析できるようにします。                                                                                      | `true`   |                                                                                                                                                    |
| [`input_format_json_named_tuples_as_objects`](/ja/reference/settings/formats#input_format_json_named_tuples_as_objects)                                           | 名前付きタプルのカラムを JSON オブジェクトとして解析します。                                                                                                | `true`   |                                                                                                                                                    |
| [`input_format_json_try_infer_numbers_from_strings`](/ja/reference/settings/formats#input_format_json_try_infer_numbers_from_strings)                             | スキーマ推論時に、文字列フィールドから数値を推論します。                                                                                                     | `false`  |                                                                                                                                                    |
| [`input_format_json_try_infer_named_tuples_from_objects`](/ja/reference/settings/formats#input_format_json_try_infer_named_tuples_from_objects)                   | スキーマ推論時に、JSON オブジェクトから名前付きタプルを推論します。                                                                                             | `true`   |                                                                                                                                                    |
| [`input_format_json_infer_incomplete_types_as_strings`](/ja/reference/settings/formats#input_format_json_infer_incomplete_types_as_strings)                       | JSON input formats でのスキーマ推論時に、Null または空のオブジェクト/配列のみを含むキーには String 型を使用します。                                                       | `true`   |                                                                                                                                                    |
| [`input_format_json_defaults_for_missing_elements_in_named_tuple`](/ja/reference/settings/formats#input_format_json_defaults_for_missing_elements_in_named_tuple) | named tuple のパース時に、JSON object で欠落している要素にデフォルト値を挿入します。                                                                           | `true`   |                                                                                                                                                    |
| [`input_format_json_ignore_unknown_keys_in_named_tuple`](/ja/reference/settings/formats#input_format_json_ignore_unknown_keys_in_named_tuple)                     | named tuple について、JSON object 内の不明なキーを無視します。                                                                                      | `false`  |                                                                                                                                                    |
| [`input_format_json_compact_allow_variable_number_of_columns`](/ja/reference/settings/formats#input_format_json_compact_allow_variable_number_of_columns)         | JSONCompact/JSONCompactEachRow フォーマットで可変数のカラムを許可し、余分なカラムは無視して、不足しているカラムにはデフォルト値を使用します。                                           | `false`  |                                                                                                                                                    |
| [`input_format_json_throw_on_bad_escape_sequence`](/ja/reference/settings/formats#input_format_json_throw_on_bad_escape_sequence)                                 | JSON 文字列に不正なエスケープシーケンスが含まれている場合は例外を発生させます。無効にすると、不正なエスケープシーケンスはデータ内にそのまま残ります。                                                    | `true`   |                                                                                                                                                    |
| [`input_format_json_empty_as_default`](/ja/reference/settings/formats#input_format_json_empty_as_default)                                                         | JSON 入力内の空のフィールドをデフォルト値として扱います。                                                                                                  | `false`. | 複雑なデフォルト式の場合は、[`input_format_defaults_for_omitted_fields`](/ja/reference/settings/formats#input_format_defaults_for_omitted_fields) も有効にする必要があります。 |
| [`output_format_json_quote_64bit_integers`](/ja/reference/settings/formats#output_format_json_quote_64bit_integers)                                               | JSON出力フォーマットで64ビット整数を引用符で囲んで出力するかどうかを制御します。                                                                                      | `true`   |                                                                                                                                                    |
| [`output_format_json_quote_64bit_floats`](/ja/reference/settings/formats#output_format_json_quote_64bit_floats)                                                   | JSON出力フォーマットで64ビット浮動小数点数を引用符で囲んで出力するかどうかを制御します。                                                                                  | `false`  |                                                                                                                                                    |
| [`output_format_json_quote_denormals`](/ja/reference/settings/formats#output_format_json_quote_denormals)                                                         | JSON出力フォーマットで'+nan'、'-nan'、'+inf'、'-inf'を出力できるようにします。                                                                            | `false`  |                                                                                                                                                    |
| [`output_format_json_quote_decimals`](/ja/reference/settings/formats#output_format_json_quote_decimals)                                                           | JSON 出力フォーマットで小数を引用符で囲むかどうかを制御します。                                                                                               | `false`  |                                                                                                                                                    |
| [`output_format_json_escape_forward_slashes`](/ja/reference/settings/formats#output_format_json_escape_forward_slashes)                                           | JSON 出力フォーマットで文字列出力のスラッシュをエスケープするかどうかを制御します。                                                                                     | `true`   |                                                                                                                                                    |
| [`output_format_json_named_tuples_as_objects`](/ja/reference/settings/formats#output_format_json_named_tuples_as_objects)                                         | named tuple のカラムを JSON object としてシリアライズします。                                                                                      | `true`   |                                                                                                                                                    |
| [`output_format_json_array_of_rows`](/ja/reference/settings/formats#output_format_json_array_of_rows)                                                             | JSONEachRow(Compact) フォーマットで、すべての行を JSON array として出力します。                                                                         | `false`  |                                                                                                                                                    |
| [`output_format_json_validate_utf8`](/ja/reference/settings/formats#output_format_json_validate_utf8)                                                             | JSON 出力フォーマットにおける UTF-8 シーケンスの検証を有効にします (JSON/JSONCompact/JSONColumnsWithMetadata フォーマットには影響しない点に注意してください。これらは常に UTF-8 を検証します) 。 | `false`  |                                                                                                                                                    |
