Как я могу преобразовать многомерную строку SQL json в действительный объект 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"
}
}
}
}
}
}
}
}
}
Проблемным случаем является массив "employees" и преобразование JSON внутреннего массива "addresses".
Пример данных SQL для «сотрудников»:
[{"age":30,"name":"User 1","addresses":"[{\"street\":"Home street 1",\"city\":"New York"},{\"street\":"Home street 2",\"city\":"Washington"}]"}]
Конфигурация фильтра Logstash: преобразование работает, если «сотрудники» не содержат вложенного массива. Но проблема возникает, когда массив i имеет вложенный массив.
filter {
ruby {
code => "
require 'json'
employees_json_value = JSON.parse(event.get('employees').to_s)
event.set('employees',employees_json_value )
"
}
}
Вопрос в том, как я могу преобразовать вложенный массив «адресов» столбца «сотрудники» в объект JSON, чтобы я мог сопоставить его с шаблоном индекса Elasticsearch.