list_to_map
list_to_map
处理器将事件中包含 key
字段的对象列表转换为目标键的映射。
配置
下表描述了用于生成映射目标键的配置选项。
选项 | 必需 | 类型 | 描述 |
---|---|---|---|
source | 是 | 字符串 | 具有 key 字段的对象列表,这些对象将被转换为生成映射的键。 |
目标 | 否 | 字符串 | 生成映射的目标。如果未指定,生成的映射将放置在根节点中。 |
key | 有条件地 | 字符串 | 要提取为生成映射中键的字段的键。如果 use_source_key 为 false ,则必须指定。 |
use_source_key | 否 | 布尔型 | 当为 true 时,生成的映射中的键将使用源中的原始键。默认为 false 。 |
value_key | 否 | 字符串 | 指定后,源列表中对象中给定 value_key 的值将被提取并根据生成的映射转换为此选项指定的值。如果未指定,源列表中包含的对象在映射时将保留其原始值。 |
extract_value | 否 | 布尔型 | 当为 true 时,源列表中的对象值将被提取并添加到生成的映射中。当为 false 时,源列表中的对象值将按其在源列表中的样子添加到生成的映射中。默认为 false |
扁平化 | 否 | 布尔型 | 当为 true 时,生成的映射输出中的值会根据 flattened_element 扁平化为单个项。否则,映射到生成的映射值的对象将显示为列表。 |
flattened_element | 有条件地 | 字符串 | 当 flatten 设置为 true 时,要保留的元素,可以是 first 或 last 。 |
用法
以下示例展示了如何在您自己的源上使用 list_to_map
处理器之前测试其用法。
创建一个名为 logs_json.log
的源文件。由于 file
源将 .log
文件中的每一行作为一个事件读取,因此即使包含多个对象,对象列表也显示为一行。
{"mylist":[{"name":"a","value":"val-a"},{"name":"b","value":"val-b1"},{"name":"b", "value":"val-b2"},{"name":"c","value":"val-c"}]}
接下来,创建一个 pipeline.yaml
文件,通过指向 .log
文件的正确路径,将 logs_json.log
文件用作 source
。
pipeline:
source:
file:
path: "/full/path/to/logs_json.log"
record_type: "event"
format: "json"
processor:
- list_to_map:
key: "name"
source: "mylist"
value_key: "value"
flatten: true
sink:
- stdout:
运行管道。如果成功,处理器将返回生成的映射,其中对象根据其 value_key
进行映射。与原始源(包含一行,因此一个事件)类似,处理器将以下 JSON 作为一行返回。为了可读性,以下示例和所有后续 JSON 示例均已调整为跨多行。
{
"mylist": [
{
"name": "a",
"value": "val-a"
},
{
"name": "b",
"value": "val-b1"
},
{
"name": "b",
"value": "val-b2"
},
{
"name": "c",
"value": "val-c"
}
],
"a": "val-a",
"b": "val-b1",
"c": "val-c"
}
示例:映射设置为 target
以下 pipeline.yaml
示例文件显示了 list_to_map
处理器设置为指定目标 mymap
时的用法。
pipeline:
source:
file:
path: "/full/path/to/logs_json.log"
record_type: "event"
format: "json"
processor:
- list_to_map:
key: "name"
source: "mylist"
target: "mymap"
value_key: "value"
flatten: true
sink:
- stdout:
生成的映射显示在 target
键下。
{
"mylist": [
{
"name": "a",
"value": "val-a"
},
{
"name": "b",
"value": "val-b1"
},
{
"name": "b",
"value": "val-b2"
},
{
"name": "c",
"value": "val-c"
}
],
"mymap": {
"a": "val-a",
"b": "val-b1",
"c": "val-c"
}
}
示例:未指定 value_key
以下 pipeline.yaml
示例文件显示了未指定 value_key
的 list_to_map
处理器。因为 key
设置为 name
,所以处理器提取对象名称用作映射中的键。
pipeline:
source:
file:
path: "/full/path/to/logs_json.log"
record_type: "event"
format: "json"
processor:
- list_to_map:
key: "name"
source: "mylist"
flatten: true
sink:
- stdout:
生成映射中的值显示为来自 .log
源的原始对象,如以下示例响应所示。
{
"mylist": [
{
"name": "a",
"value": "val-a"
},
{
"name": "b",
"value": "val-b1"
},
{
"name": "b",
"value": "val-b2"
},
{
"name": "c",
"value": "val-c"
}
],
"a": {
"name": "a",
"value": "val-a"
},
"b": {
"name": "b",
"value": "val-b1"
},
"c": {
"name": "c",
"value": "val-c"
}
}
示例:flattened_element
设置为 last
以下 pipeline.yaml
示例文件将 flattened_element
设置为 last,从而根据每个值的最后一个元素扁平化处理器输出。
pipeline:
source:
file:
path: "/full/path/to/logs_json.log"
record_type: "event"
format: "json"
processor:
- list_to_map:
key: "name"
source: "mylist"
target: "mymap"
value_key: "value"
flatten: true
flattened_element: "last"
sink:
- stdout:
处理器将对象 b
映射到值 val-b2
,因为 val-b2
是对象 b
中的最后一个元素,如以下输出所示。
{
"mylist": [
{
"name": "a",
"value": "val-a"
},
{
"name": "b",
"value": "val-b1"
},
{
"name": "b",
"value": "val-b2"
},
{
"name": "c",
"value": "val-c"
}
],
"a": "val-a",
"b": "val-b2",
"c": "val-c"
}
示例:flatten
设置为 false
以下 pipeline.yaml
示例文件将 flatten
设置为 false
,使得处理器将生成映射中的值输出为列表。
pipeline:
source:
file:
path: "/full/path/to/logs_json.log"
record_type: "event"
format: "json"
processor:
- list_to_map:
key: "name"
source: "mylist"
target: "mymap"
value_key: "value"
flatten: false
sink:
- stdout:
响应中的某些对象的值可能包含多个元素,如以下响应所示。
{
"mylist": [
{
"name": "a",
"value": "val-a"
},
{
"name": "b",
"value": "val-b1"
},
{
"name": "b",
"value": "val-b2"
},
{
"name": "c",
"value": "val-c"
}
],
"a": [
"val-a"
],
"b": [
"val-b1",
"val-b2"
],
"c": [
"val-c"
]
}
示例:use_source_key
和 extract_value
设置为 true
以下 pipeline.yaml
示例文件将 flatten
设置为 false
,使得处理器将生成映射中的值输出为列表。
pipeline:
source:
file:
path: "/full/path/to/logs_json.log"
record_type: "event"
format: "json"
processor:
- list_to_map:
source: "mylist"
use_source_key: true
extract_value: true
sink:
- stdout:
mylist
中的对象值被提取并添加到具有源键 name
和 value
的字段中,如以下响应所示。
{
"mylist": [
{
"name": "a",
"value": "val-a"
},
{
"name": "b",
"value": "val-b1"
},
{
"name": "b",
"value": "val-b2"
},
{
"name": "c",
"value": "val-c"
}
],
"name": ["a", "b", "b", "c"],
"value": ["val-a", "val-b1", "val-b2", "val-c"]
}