

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# JSON 變動處理器
<a name="CloudWatch-Logs-Transformation-JSONMutate"></a>

本節包含您可以與日誌事件轉換器搭配使用的 JSON 變動處理器相關資訊。

**Contents**
+ [addKeys](#CloudWatch-Logs-Transformation-addKeys)
+ [deleteKeys](#CloudWatch-Logs-Transformation-deleteKeys)
+ [moveKeys](#CloudWatch-Logs-Transformation-moveKeys)
+ [renameKeys](#CloudWatch-Logs-Transformation-renameKeys)
+ [copyValue](#CloudWatch-Logs-Transformation-copyValue)
+ [listToMap](#CloudWatch-Logs-Transformation-listToMap)

## addKeys
<a name="CloudWatch-Logs-Transformation-addKeys"></a>

使用`addKeys`處理器將新的鍵/值對新增至日誌事件。


| 欄位 | Description | 是否為必要？ | 預設 | 限制 | 
| --- | --- | --- | --- | --- | 
| 項目 | 項目陣列。陣列中的每個項目都可以包含 key、 value和 overwriteIfExists 欄位。 | 是 |  | 項目上限：5 | 
| 金鑰 | 要新增之新項目的索引鍵 | 是 |  | 長度上限：128<br />巢狀金鑰深度上限：3 | 
| value | 要新增的新項目值 | 是 |  | 長度上限：256 | 
| overwriteIfExists | 如果您將此設定為 true，則如果事件中key已存在，則會覆寫現有的值。預設值為 false。 | 否 | false | 沒有限制 | 

**範例**

採用下列範例日誌事件：

```
{
    "outer_key": {
        "inner_key": "inner_value"
    }
}
```

轉換器組態是這樣，使用 `addKeys`搭配 `parseJSON`：

```
[
    {
        "parseJSON": {}
    },
    {
        "addKeys": {
            "entries": [
                {
                    "key": "outer_key.new_key",
                    "value": "new_value"
                }
            ]
        }
    }
]
```

轉換的日誌事件如下。

```
{
  "outer_key": {
    "inner_key": "inner_value",
    "new_key": "new_value"
  }
}
```

## deleteKeys
<a name="CloudWatch-Logs-Transformation-deleteKeys"></a>

使用`deleteKeys`處理器從日誌事件中刪除欄位。這些欄位可以包含鍵/值對。


| 欄位 | Description | 是否為必要？ | 預設 | 限制 | 
| --- | --- | --- | --- | --- | 
| withKeys | 要刪除的金鑰清單。 | 是 | 沒有限制 | 項目上限：5 | 

**範例**

採用下列範例日誌事件：

```
{
    "outer_key": {
        "inner_key": "inner_value"
    }
}
```

轉換器組態是這樣，使用 `deleteKeys`搭配 `parseJSON`：

```
[
    {
        "parseJSON": {}
    },
    {
        "deleteKeys": {
            "withKeys":["outer_key.inner_key"]
        }
    }
]
```

轉換的日誌事件如下。

```
{
  "outer_key": {}
}
```

## moveKeys
<a name="CloudWatch-Logs-Transformation-moveKeys"></a>

使用`moveKeys`處理器將金鑰從一個欄位移至另一個欄位。


| 欄位 | Description | 是否為必要？ | 預設 | 限制 | 
| --- | --- | --- | --- | --- | 
| 項目 | 項目陣列。陣列中的每個項目都可以包含 source、 target和 overwriteIfExists 欄位。 | 是 |  | 項目上限：5 | 
| source | 要移動的金鑰 | 是 |  | 長度上限：128<br />巢狀金鑰深度上限：3 | 
| 目標 | 要移至的金鑰 | 是 |  | 長度上限：128<br />巢狀金鑰深度上限：3 | 
| overwriteIfExists | 如果您將此設定為 true，則如果事件中key已存在，則會覆寫現有的值。預設值為 false。 | 否 | false | 沒有限制 | 

**範例**

採用下列範例日誌事件：

```
{
    "outer_key1": {
        "inner_key1": "inner_value1"
    },
    "outer_key2": {
        "inner_key2": "inner_value2"
    }
}
```

轉換器組態是這樣，使用 `moveKeys`搭配 `parseJSON`：

```
[
    {
        "parseJSON": {}
    },
    {
        "moveKeys": {
            "entries": [
                {
                    "source": "outer_key1.inner_key1",
                    "target": "outer_key2"
                }
            ]
        }
    }
]
```

轉換的日誌事件如下。

```
{
  "outer_key1": {},
  "outer_key2": {
    "inner_key2": "inner_value2",
    "inner_key1": "inner_value1"
  }
}
```

## renameKeys
<a name="CloudWatch-Logs-Transformation-renameKeys"></a>

使用`renameKeys`處理器重新命名日誌事件中的金鑰。


| 欄位 | Description | 是否為必要？ | 預設 | 限制 | 
| --- | --- | --- | --- | --- | 
| 項目 | 項目陣列。陣列中的每個項目都可以包含 key、 target和 overwriteIfExists 欄位。 | 是 | 沒有限制 | 項目上限：5 | 
| 金鑰 | 要重新命名的金鑰 | 是 | 沒有限制 | 長度上限：128 | 
| 目標 | 新的金鑰名稱 | 是 | 沒有限制 | 長度上限：128<br />巢狀金鑰深度上限：3 | 
| overwriteIfExists | 如果您將此設定為 true，則如果事件中key已存在，則會覆寫現有的值。預設值為 false。 | 否 | false | 沒有限制 | 

**範例**

採用下列範例日誌事件：

```
{
    "outer_key": {
        "inner_key": "inner_value"
    }
}
```

轉換器組態是這樣，使用 `renameKeys`搭配 `parseJSON`：

```
[
    {
        "parseJSON": {}
    },
    {
        "renameKeys": {
            "entries": [
                {
                    "key": "outer_key",
                    "target": "new_key"
                }
            ]
        }
    }
]
```

轉換的日誌事件如下。

```
{
  "new_key": {
    "inner_key": "inner_value"
  }
}
```

## copyValue
<a name="CloudWatch-Logs-Transformation-copyValue"></a>

使用`copyValue`處理器在日誌事件中複製值。您也可以使用此處理器，透過將下列中繼資料金鑰的值複製到日誌事件，將中繼資料新增至日誌事件：`@logGroupName`、`@logGroupStream`、`@accountId`、`@regionName`。這會在下列範例中說明。


| 欄位 | Description | 是否為必要？ | 預設 | 限制 | 
| --- | --- | --- | --- | --- | 
| 項目 | 項目陣列。陣列中的每個項目都可以包含 source、 target和 overwriteIfExists 欄位。 | 是 |  | 項目上限：5 | 
| source | 要複製的金鑰 | 是 |  | 長度上限：128<br />巢狀金鑰深度上限：3 | 
| 目標 | 將值複製到 的金鑰 | 是 | 沒有限制 | 長度上限：128<br />巢狀金鑰深度上限：3 | 
| overwriteIfExists | 如果您將此設定為 true，則如果事件中key已存在，則會覆寫現有的值。預設值為 false。 | 否 | false | 沒有限制 | 

**範例**

採用下列範例日誌事件：

```
{
    "outer_key": {
        "inner_key": "inner_value"
    }
}
```

轉換器組態是這樣，使用 `copyValue`搭配 `parseJSON`：

```
[
    {
        "parseJSON": {}
    },
    {
        "copyValue": {
            "entries": [
                {
                    "key": "outer_key.new_key",
                    "target": "new_key"
                },
                {
                    "source": "@logGroupName",
                    "target": "log_group_name"
                },
                {
                    "source": "@logGroupStream",
                    "target": "log_group_stream"
                },
                {
                    "source": "@accountId",
                    "target": "account_id"
                },
                {
                    "source": "@regionName",
                    "target": "region_name"
                }
            ]
        }
    }
]
```

轉換的日誌事件如下。

```
{
  "outer_key": {
    "inner_key": "inner_value"
  },
  "new_key": "inner_value",
  "log_group_name": "myLogGroupName",
  "log_group_stream": "myLogStreamName",
  "account_id": "012345678912",
  "region_name": "us-east-1"
}
```

## listToMap
<a name="CloudWatch-Logs-Transformation-listToMap"></a>

`listToMap` 處理器會取得包含金鑰欄位的物件清單，並將其轉換為目標金鑰的映射。


| 欄位 | Description | 是否為必要？ | 預設 | 限制 | 
| --- | --- | --- | --- | --- | 
| source | ProcessingEvent 中的金鑰，其中包含將轉換為映射的物件清單 | 是 |  | 長度上限：128<br />巢狀金鑰深度上限：3 | 
| 金鑰 | 要擷取為所產生映射中索引鍵的欄位索引鍵 | 是 |  | 長度上限：128 | 
| valueKey | 如果指定此值，您在此參數中指定的值將從source物件中擷取，並放入產生的映射值中。否則，來源清單中的原始物件會放入產生的映射值中。 | 否 |  | 長度上限：128 | 
| 目標 | 將存放所產生映射之欄位的索引鍵  | 否 | 根節點 | 長度上限：128<br />巢狀金鑰深度上限：3 | 
| flatten | 布林值，指出清單是否將扁平化為單一項目，或產生的映射中的值是否將是清單。<br />根據預設，相符索引鍵的值會以陣列表示。`flatten` 設定為 `true` 以根據 的值將陣列轉換為單一值`flattenedElement`。 | 否 | false |  | 
| flattenedElement | 如果您將 flatten設定為 true，請使用 flattenedElement指定要保留的元素 lastfirst或 。 | `flatten` 當 設定為 時為必要 `true` |  | 值只能為 first或 last | 

**範例**

採用下列範例日誌事件：

```
{
    "outer_key": [
        {
            "inner_key": "a",
            "inner_value": "val-a"
        },
        {
            "inner_key": "b",
            "inner_value": "val-b1"
        },
        {
            "inner_key": "b",
            "inner_value": "val-b2"
        },
        {
            "inner_key": "c",
            "inner_value": "val-c"
        }
    ]
}
```

**使用案例 1 的轉換器：** `flatten`是 `false`

```
[
    {
        "parseJSON": {}
    },
    {
        "listToMap": {
            "source": "outer_key"
            "key": "inner_key",
            "valueKey": "inner_value",
            "flatten": false
        }
    }
]
```

轉換的日誌事件如下。

```
{
    "outer_key": [
        {
            "inner_key": "a",
            "inner_value": "val-a"
        },
        {
            "inner_key": "b",
            "inner_value": "val-b1"
        },
        {
            "inner_key": "b",
            "inner_value": "val-b2"
        },
        {
            "inner_key": "c",
            "inner_value": "val-c"
        }
    ],
    "a": [
        "val-a"
    ],
    "b": [
        "val-b1",
        "val-b2"
    ],
    "c": [
        "val-c"
    ]
}
```

**使用案例 2 的轉換器：** `flatten` 是 `true`， `flattenedElement`是 `first`

```
[
    {
        "parseJSON": {}
    },
    {
        "listToMap": {
            "source": "outer_key"
            "key": "inner_key",
            "valueKey": "inner_value",
            "flatten": true,
            "flattenedElement": "first"
        }
    }
]
```

轉換的日誌事件如下。

```
{
    "outer_key": [
        {
            "inner_key": "a",
            "inner_value": "val-a"
        },
        {
            "inner_key": "b",
            "inner_value": "val-b1"
        },
        {
            "inner_key": "b",
            "inner_value": "val-b2"
        },
        {
            "inner_key": "c",
            "inner_value": "val-c"
        }
    ],
    "a": "val-a",
    "b": "val-b1",
    "c": "val-c"
}
```

**使用案例 3 的轉換器：** `flatten` 是 `true`， `flattenedElement`是 `last`

```
[
    {
        "parseJSON": {}
    },
    {
        "listToMap": {
            "source": "outer_key"
            "key": "inner_key",
            "valueKey": "inner_value",
            "flatten": true,
            "flattenedElement": "last"
        }
    }
]
```

轉換的日誌事件如下。

```
{
    "outer_key": [
        {
            "inner_key": "a",
            "inner_value": "val-a"
        },
        {
            "inner_key": "b",
            "inner_value": "val-b1"
        },
        {
            "inner_key": "b",
            "inner_value": "val-b2"
        },
        {
            "inner_key": "c",
            "inner_value": "val-c"
        }
    ],
    "a": "val-a",
    "b": "val-b2",
    "c": "val-c"
}
```