Как я могу преобразовать многомерную строку json SQL в допустимый объект JSON, чтобы ее можно было сопоставить с типами полей шаблона индекса Elasticsearch.
Пример:
Давайте предположим, что это мойШаблон индекса Elasticsearch.
{
"settings": {
"number_of_shards": "5"
},
"mappings": {
"_doc": {
"properties": {
"manager": {
"properties": {
"age": {
"type": "integer"
},
"name": {
"type": "text"
}
}
},
"employees": {
"type": "nested",
"properties": {
"age": {
"type": "integer"
},
"name": {
"type": "text"
},
"addresses": {
"type": "nested",
"properties": {
"street": {
"type": "text"
},
"city": {
"type": "text"
}
}
}
}
}
}
}
}
}
Проблемным случаем является преобразование JSON для массива "сотрудники" и его внутреннего массива "адресов".
Пример данных SQL для "сотрудников":
[{"age":30,"name":"User 1","addresses":"[{\"street\":"Home street 1",\"city\":"New York"},{\"street\":"Home street 2",\"city\":"Washington"}]"}]
Конфигурация фильтра Logstash: преобразование работает, если «сотрудники» не содержат вложенный массив.Но проблема возникает, когда у массива есть вложенный массив.
filter {
ruby {
code => "
require 'json'
employees_json_value = JSON.parse(event.get('employees').to_s)
event.set('employees',employees_json_value )
"
}
}
Вопрос в том, как преобразовать массив вложенных «адресов» столбцов «сотрудников» в объект JSON, чтобы я мог сопоставить его с шаблоном индекса Elasticsearch.