Как разобрать необычный массив? - PullRequest
0 голосов
/ 02 мая 2018

Я использую плагин cordova-brother-label-printer 'cordova-brother-printer * *, чтобы получить список принтеров. Функция findNetworkPrinters возвращает данные примерно так:

[{nodeName=PrinterName123456, serNo=Serial12345, ipAddress=192.168.1.134, macAddress=MA:CA:DD:RE:SS}]

Это не стандартная строка в кодировке JSON, поэтому я не могу разобрать ее с помощью JSON.parse. Есть ли другой способ преобразовать это в JSON?

Спасибо за любую помощь.

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Вы можете заменить

  • { с {"
  • } с "}
  • ,\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.log(output);
0 голосов
/ 02 мая 2018

С помощью функции replace в javascript вы сможете преобразовать ее в действительный 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

0 голосов
/ 02 мая 2018

Используйте 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.log(JSON.parse(json));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...