You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解析非标准格式数组?求cordova-brother-label-printer插件数据转JSON方法

解决cordova-brother-label-printer返回非标准JSON格式的问题

嘿,这个问题我之前用Brother打印机插件时也踩过坑!返回的这种{nodeName=PrinterName123456, ...}格式其实是Java集合(比如HashMap)默认的toString()输出,并不是标准JSON,咱们可以通过字符串处理把它转成可解析的JSON格式。

下面是两种实用的处理方案:

方案一:正则表达式替换(最直接)

通过正则匹配键值对的结构,给键名和值加上双引号,并修正分隔符,把它转换成标准JSON字符串,再用JSON.parse()解析。

示例代码(JavaScript)

function parseBrotherPrinterData(rawString) {
  try {
    // 1. 给所有键名加上双引号,同时把=替换成:
    let formatted = rawString.replace(/(\w+)=/g, '"$1":');
    // 2. 给所有值加上双引号(适配字符串类型的值,打印机信息基本都是字符串)
    formatted = formatted.replace(/:([^,}]+)/g, ':"$1"');
    // 3. 清理多余空格(可选,避免格式问题)
    formatted = formatted.replace(/\s+/g, '');
    // 4. 解析成JSON对象
    return JSON.parse(formatted);
  } catch (err) {
    console.error("转换打印机数据失败:", err);
    return null;
  }
}

// 测试使用
const rawPrinterList = '[{nodeName=PrinterName123456, serNo=Serial12345, ipAddress=192.168.1.134, macAddress=MA:CA:DD:RE:SS}]';
const printerJSON = parseBrotherPrinterData(rawPrinterList);
console.log(printerJSON);

方案二:更严谨的正则适配特殊场景

如果打印机名称或其他字段包含空格、特殊符号,上面的基础正则可能会出错,这时可以用更精准的匹配逻辑:

function parseBrotherPrinterDataStrict(rawString) {
  try {
    // 匹配键名(支持带下划线/连字符的键)
    let formatted = rawString.replace(/([a-zA-Z0-9_\-]+)=/g, '"$1":');
    // 匹配值,直到遇到逗号或大括号结束(非贪婪匹配)
    formatted = formatted.replace(/:([^,}]*?)(?=,|})/g, (match, value) => {
      // 如果值本身包含引号,先转义
      const escapedValue = value.replace(/"/g, '\\"');
      return `:"${escapedValue}"`;
    });
    // 清理空格
    formatted = formatted.replace(/\s+/g, '');
    return JSON.parse(formatted);
  } catch (err) {
    console.error("严格模式转换失败:", err);
    return null;
  }
}

额外提示

如果插件本身有配置项可以返回标准JSON,建议先查看插件的参数说明,不过根据我的使用经验,这个插件默认返回的就是这种Java风格的字符串,所以上面的字符串处理方法是最可靠的。

内容的提问来源于stack exchange,提问作者Daniel Hutton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:17:59