JSON.parse处理非标准Json数据出错的解决

当我们使用JSON.parse()解析JSON格式的数据时,如果数据格式非标准的话,就有可能会出现报错现象。

例如我们有一个非标准的JSON格式数据如下:

{
  name: "Tom",
  age: 28
}

使用JSON.parse()时会报错,错误信息如下:

Uncaught SyntaxError: Unexpected token n in JSON at position 4

这是因为非标准的JSON格式中,属性名称必须使用双引号""包裹。

解决方法

我们可以通过使用try catch来捕获这个错误,然后手动进行属性名称处理。

let data = '{ name: "Tom", age: 28 }';
try {
  data = JSON.parse(data);
} catch (e) {
  data = data.replace(/([\w]+)\s*:/g, function (match, p1) {
    return `"${p1}":`;
  });
  data = JSON.parse(data);
}
console.log(data); // { name: "Tom", age: 28 }

上述解决方法中,我们使用了正则表达式来处理非标准JSON格式中的属性名称,将属性名称包裹在双引号中后,再使用JSON.parse()进行解析。

另外一个示例,假设我们有如下非标准的JSON格式数据:

{ name: "Tom", age: 28, friends: { name: "Jerry", age: 27 } }

使用JSON.parse()时也会出错:

Uncaught SyntaxError: Unexpected token n in JSON at position 5

这是因为非标准的JSON格式中,对象属性名称也必须使用双引号包裹。

解决方法

我们可以通过递归进行处理,将非标准JSON格式转化为标准的JSON格式以后再解析。

function parseNonStandardJson(str) {
  let result = str.replace(/([\w]+)\s*:/g, function (match, p1) {
    return `"${p1}":`;
  });
  result = result.replace(/'/g, '"');
  if (result.indexOf('{') == 0) {
    result = `[${result}]`;
    result = JSON.parse(result);
    return result[0];
  } else {
    return JSON.parse(result);
  }
}

let data = '{ name: "Tom", age: 28, friends: { name: "Jerry", age: 27 } }';
let parsedData = parseNonStandardJson(data);
console.log(parsedData); // { name: "Tom", age: 28, friends: { name: "Jerry", age: 27 } }

上述解决方法中,我们先使用正则表达式将非标准JSON格式中的属性名称包裹在双引号中,将单引号转化为双引号。然后通过判断字符串首尾是否为大括号(即是否为一个对象),来决定使用JSON.parse()还是转化为一个数组再使用JSON.parse()。使用递归对子对象进行处理,最终得到标准的JSON格式对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JSON.parse处理非标准Json数据出错的解决 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • K8S 中 kubectl 命令详解

    当我们需要在 Kubernetes 集群中进行管理操作时,kubectl 是一个必不可少的工具。它是 Kubernetes 自带的命令行管理工具,可以用来管理集群内的 Pods、Services、Deployments 等资源对象。下面详细讲解一下 kubectl 的使用方法。 安装 kubectl 在使用 kubectl 命令之前,需要先安装 kubect…

    JavaScript 2023年6月11日
    00
  • 小程序实现计时器功能

    下面是“小程序实现计时器功能”的完整攻略: 1. 准备工作 在开始编写计时器功能之前,需要先创建一个小程序项目,并在页面中引入 wx.createInnerAudioContext() 实现计时结束后的声音提示。 2. 计时器实现 2.1 变量定义和初始值设置 首先,需要在 data 中定义计时器相关的变量,例如当前计时器的状态、计时器显示的时间等: dat…

    JavaScript 2023年6月11日
    00
  • javascript中的 object 和 function小结

    让我来为你详细讲解”JavaScript中的Object和Function小结”。 JavaScript中的Object 在JavaScript中,对象是一种复合数据类型,可以把它看做是多个属性的集合。对象的属性可以是基本数据类型,如字符串、数字等,也可以是其他对象以及函数。通过点(.)或中括号([])语法,可以访问和修改对象的属性。 例如,我们可以创建一个…

    JavaScript 2023年5月27日
    00
  • 一文带你掌握JavaScript中的箭头函数

    一文带你掌握JavaScript中的箭头函数 在JavaScript中,箭头函数是一种较新的语言特性。相较于传统的函数声明,箭头函数具有更简洁的语法和更明确的this指向,因此逐渐被广泛使用。本文将详细介绍箭头函数的定义、使用场景、注意事项和示例。 定义 箭头函数是一种没有自己this值,必须获取父级作用域中this值得特殊函数语法。它的语法结构比传统的函数…

    JavaScript 2023年6月10日
    00
  • javascript 通过封装div方式弹出div窗体

    下面是JavaScript通过封装div方式弹出div窗体的攻略,包含以下几个步骤: 步骤1:创建一个DIV窗体 我们可以使用HTML标记创建一个DIV窗体,比如: <div id="myDiv" style="display:none;"> 这是弹出窗体的内容。 </div> 这里创建了一个I…

    JavaScript 2023年6月11日
    00
  • Javascript将图片的绝对路径转换为base64编码的方法

    将图片的绝对路径转换为base64编码的方法可以使用Javascript的Canvas对象来实现。具体过程如下: 步骤 1:创建一个Image对象 首先,我们需要创建一个Image对象,将想要转换成base64编码的图片作为其src属性的值。 const image = new Image(); image.src = ‘https://example.co…

    JavaScript 2023年5月19日
    00
  • js实现简单计算器

    讲解如下: JS实现简单计算器的完整攻略 1. HTML结构 首先,我们需要在HTML中创建一个表单,用于接收用户输入的数据。HTML代码如下: <form> <input type="text" id="num1"> + <input type="text" id=&…

    JavaScript 2023年5月28日
    00
  • JavaScript编码小技巧分享

    JavaScript编码小技巧分享 概述 JavaScript是一门常用的脚本编程语言,用于网页前端开发。面对日益复杂的开发需求,编写高效、稳定、易于维护的JavaScript代码显得尤为重要。本文将分享一些实用的JavaScript编码小技巧,帮助你提高开发效率、提升代码质量。 小技巧一:避免使用全局变量 在JavaScript中,全局变量具有全局作用域,…

    JavaScript 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部