Как преобразовать строку со знаком «=» в json в JavaScript

#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 в вопросе не упоминались. Найдите или задайте новый вопрос, если у вас другие требования.