在js中如何Json字符串格式不对,如何处理

uniappp wxmp-rsa 非对称解密时,发现图文格式的内容解密失败还会导致json字符串不完整,导致拿不到数据,属实无法了,找了很多很多办法都不行,突然想着要不把错误的json字符串补齐吧,于是找到这个文章-博主是真的厉害啊,我这里只是记录一下,以免下回忘记

如果 JSON 字符串格式不正确,解析它时会抛出异常,但我们可以尝试尽可能提取有效的信息。以下是一个方法,可以使用正则表达式和字符串操作来提取部分有效的 JSON 内容,即使整个字符串无法被 JSON.parse 完全解析。
代码如下:

function safeJSONParse(jsonString) {
  try {
    return JSON.parse(jsonString);
  } catch (error) {
    console.error("Invalid JSON format:", error);
    
    // 尝试手动提取有效的 JSON 键值对
    const extractedData = {};
    const keyValuePattern = /"(\w+)":\s*("[^"]*"|\d+|true|false|null)/g;
    let match;
    
    while ((match = keyValuePattern.exec(jsonString)) !== null) {
      const key = match[1];
      let value = match[2];
      
      // 如果 value 是字符串,去掉引号
      if (value.startsWith('"') && value.endsWith('"')) {
        value = value.slice(1, -1);
      } else if (value === 'true') {
        value = true;
      } else if (value === 'false') {
        value = false;
      } else if (value === 'null') {
        value = null;
      } else if (!isNaN(value)) {
        value = Number(value);
      }
      
      extractedData[key] = value;
    }
    
    return extractedData;
  }
}

// 使用示例
const invalidJsonString = '{name: "John", "age": 30, "valid": true, "missing_quote: "error"}';
const parsedData = safeJSONParse(invalidJsonString);
console.log("Extracted data:", parsedData);

在这个示例中,safeJSONParse 函数首先尝试使用 JSON.parse 解析字符串。如果解析失败,则使用正则表达式从字符串中提取有效的键值对。正则表达式 /“(\w+)”:\s*(“[^”]*"|\d+|true|false|null)/g 匹配键值对的常见模式,包括字符串、数字、布尔值和 null。提取到的值根据类型进行转换,然后存储在 extractedData 对象中,最后返回这个对象。

这种方法虽然不能保证提取到所有正确的数据,但在 JSON 格式不正确时,尽可能提取有用的信息。

原文链接:https://blog.csdn.net/u012953777/article/details/140137176

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值