【问题标题】:How to parse an unusual array?如何解析不寻常的数组?
【发布时间】:2018-05-02 09:50:10
【问题描述】:

我正在使用“cordova-brother-label-printer”cordova 插件来获取打印机列表。 findNetworkPrinters 函数返回数据如下:

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

这不是标准的 JSON 编码字符串,因此我无法使用 JSON.parse 对其进行解析。还有其他方法可以将其转换为 JSON 吗?

感谢您的帮助。

【问题讨论】:

  • 没有内置方法可以解析该格式……无论该格式是什么。编写自己的解析器或查找第三方库。

标签: javascript arrays json parsing


【解决方案1】:

使用 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));

【讨论】:

  • @DanielHutton 这将失败,因为打印机名称中有空格或引号。这些在您的问题中没有被特殊处理,因此不能假设它们不能出现。这是一个可怕的答案。编写自己的解析器。
  • @user234461 - 这是针对这种情况量身定制的具体答案,应根据数据进行更新。它不会按设计处理其他任何事情。
  • @OriDrori 这是另一个“针对此案例量身定制的具体答案”:str.replace(/=Serial12435/, '="Serial12345"')。你能看出问题吗? :-)
【解决方案2】:

你可以替换

  • {{"
  • }"}
  • ,\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);

【讨论】:

  • 非常感谢您的回答。我会接受 Ori 首先回答的问题,但我感谢您的帮助。
  • @DanielHutton 当然,很高兴这个答案会有所帮助。
【解决方案3】:

使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多