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日

相关文章

  • JavaScript数组及常见操作方法小结

    JavaScript数组及常见操作方法小结 JavaScript中的数组是一组有序的数据集合,可以存储不同类型的数据,包括数字、字符串、对象、甚至是其他数组。本文将介绍JavaScript数组常见的操作方法。 创建数组 在JavaScript中,可以通过以下两种方式来创建一个数组。 直接赋值法 直接赋值法是指在一个变量名后使用一对方括号来创建一个数组。例如:…

    JavaScript 2023年5月27日
    00
  • 解读Java和JavaScript区别与联系

    解读Java和JavaScript区别与联系 Java(简称Java语言)是由Sun Microsystems公司于1995年5月推出的高级编程语言,被广泛用于Web开发、移动应用开发、桌面应用开发、游戏开发等多个方向。 JavaScript(简称JS)是一种脚本语言,最初用于Web前端交互式设计,后来广泛应用于客户端/服务器端应用程序、游戏开发等领域。 区…

    JavaScript 2023年5月18日
    00
  • JavaScript中Reduce10个常用场景技巧

    JavaScript中reduce是一个非常有用的数组方法,它可以对一个数组的所有元素进行迭代,并返回一个最终的结果。reduce方法有很多应用场景,下面将介绍十个常用场景技巧。 1. 数组求和 使用reduce方法可以很方便地对数组中的数值进行求和。只需将reduce方法的初始值设置为0,每次迭代时将两个数值相加即可。 const arr = [1, 2,…

    JavaScript 2023年6月10日
    00
  • js裁剪(分隔)字符串的三种常用方法

    当我们处理字符串时,经常需要对字符串进行裁剪或者分隔,这里我介绍三种常用的JavaScript字符串处理方法。 方法一:使用substr方法裁剪字符串 substr方法基于指定的起始下标和长度裁剪给定的字符串。 const originalString = "Hello, World!"; const startIndex = 7; //…

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

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

    JavaScript 2023年5月20日
    00
  • 3款实用的在线JS代码工具(国外)

    3款实用的在线JS代码工具(国外) 1. JSFiddle 简介 JSFiddle 是一个在线的代码编辑器,可以用来编辑 HTML/CSS/JavaScript 代码,并且可以立即运行和分享代码。它可以在左侧编辑 HTML/CSS/JavaScript 代码,在中间显示运行结果,在右侧显示 JavaScript 控制台。 使用方法 打开 JSFiddle 的…

    JavaScript 2023年5月19日
    00
  • javascript 循环读取JSON数据的代码

    让我来为大家详细讲解“javascript 循环读取JSON数据的代码”的完整攻略。 什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。JSON数据格式可以表示数字、字符串、布尔值、对象、数组等类型的数据,用于存储和交换数据。 如何读取JSON数据 读取JSO…

    JavaScript 2023年5月27日
    00
  • 原生JS和jQuery操作DOM对比总结

    下面是关于”原生JS和jQuery操作DOM对比总结”的完整攻略。 1. 什么是DOM DOM(Document Object Model)是一种描述文档的方法。在Web页面加载后,浏览器会将HTML文档解析为DOM树。DOM树是一个基于节点(Node)层次结构的树型结构,它定义了每个节点的父/子/兄弟关系,同时也封装了从某个节点的子节点,在Web页面上修改…

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