#lambda #apache-kafka #jsonparser
Вопрос:
Следующая строка возвращается из Кафки в Лямбда-коннектор.
'{device_id=D_2021_A07, key=tele_metrics, sensor_1=62, sensor_2=23}'
Я хочу преобразовать это в допустимый JSON, как это
{
"device_id": "D_2021_A07", //String
"key": "tele_metrics", //String
"sensor_1": 62, //Integer
"sensor_2": 23 //Integer
}
Как я могу это сделать в Javascript.
Комментарии:
1. Я бы исследовал, как изменить формат данных, предоставляемых Кафкой. Потому что строка, которую вы получаете, — это мусор. Это невозможно разобрать.
2. @gnasher729 пока формат задокументирован, его можно анализировать. Это просто не JSON. Это может быть собственный формат, но это не мешает его анализу, даже если это нужно сделать вручную.
Ответ №1:
Вы можете удалить первый и последний символ, разделить их на запятые, разделить на каждом =
, преобразовать значения в числа, если это возможно, а затем объединить пары в объект:
const dataA = '{device_id=D_2021_A07, key=tele_metrics, sensor_1=62, sensor_2=23}';
const dataB = Object.fromEntries(
dataA
.substring(1, dataA.length - 1)
.split(', ')
.map(pair => pair.split('='))
.map(([key, value]) => [key, isNaN(value) ? value : value])
);
console.log(dataB);
console.log(JSON.stringify(dataB));
Комментарии:
1. Это работает Хорошо, как и ожидалось.
2. Это решение не решит проблему массивов
3. Массивы @Charlie-Greenman в вопросе не упоминались. Найдите или задайте новый вопрос, если у вас другие требования.