Я использую плагин cordova 'Кордова-брат-этикетка-принтер', чтобы получить список принтеров. Функция findNetworkPrinters возвращает следующие данные:
[{nodeName=PrinterName123456, serNo=Serial12345, ipAddress=192.168.1.134, macAddress=MA:CA:DD:RE:SS}]
Это не стандартная строка в кодировке JSON, поэтому я не могу проанализировать ее с помощью JSON.parse. Есть ли другой способ преобразовать это в JSON?
Спасибо за любую помощь.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Используйте String.replace() с RegExp, чтобы переформатировать строку в формат JSON и проанализировать ее с помощью JSON.parse():
const str = '[{nodeName=PrinterName123456, serNo=Serial12345, ipAddress=192.168.1.134, macAddress=MA:CA:DD:RE:SS}]';
const json = str
.replace(/([^\[\]{}=\s,]+)/g, '"$1"')
.replace(/=/g, ':');
console.info(JSON.parse(json));@DanielHutton это не сработает, если в имени принтера есть пробелы или кавычки. Они не обрабатываются специально в формате, указанном в вашем вопросе, поэтому нельзя предполагать, что они не могут появиться. Это ужасный ответ. Напишите свой собственный парсер.
@ user234461 - это конкретный ответ, адаптированный для данного случая, и его следует обновлять в соответствии с данными. По замыслу, он ни с чем не работает.
@OriDrori Вот еще один «конкретный ответ, адаптированный к этому случаю»: str.replace(/=Serial12435/, ' = "Serial12345"'). Вы видите проблему? :-)
Вы можете заменить
{ с {"} с "},\s* с ","= с ":"В этом порядке создать допустимую строку JSON и затем проанализировать.
var input = "[{nodeName=PrinterName123456, serNo=Serial12345, ipAddress=192.168.1.134, macAddress=MA:CA:DD:RE:SS}]";
var output = JSON.parse(
input.replace(/{/g,'{"')
.replace(/}/g, '"}')
.replace(/,\s*/g, '","')
.replace(/=/g, '":"')
);
console.info(output);Большое спасибо за ваш ответ. Я приму Ори, как он ответил первым, но я ценю помощь.
@DanielHutton Конечно, рад, что ответ может помочь.
С помощью функции javascript replace вы сможете преобразовать это в действительный JSON.
Попробуй это:
var inputString = '[{nodeName=PrinterName123456, serNo=Serial12345, ipAddress=192.168.1.134, macAddress=MA:CA:DD:RE:SS}]';
var json = JSON.parse(inputString.replace(/([^ = {]*)=([^,}]*)(,\s?)?/g, '"$1": "$2"$3'));
Регулярное выражение: https://regex101.com/r/AMCNlh/1
Нет встроенных методов для анализа этого формата… каким бы он ни был. Напишите свой собственный парсер или найдите стороннюю библиотеку.