← jQuery.now():获取毫秒级时间戳的轻量方案 jQuery.inArray():数组元素定位的精准工具 →

jQuery.parseJSON():严格模式下的JSON解析利器

原创 2026-05-04 jQuery 已有人查阅

在Web开发中,无论是处理Ajax请求返回的数据,还是读取本地存储的用户配置,我们打交道最多的数据格式就是JSON。虽然现在浏览器都内置了原生的 JSON.parse() 方法,但在jQuery生态里,jQuery.parseJSON() 依然是一个值得聊聊的工具。它不只是帮你把字符串变成对象,它对JSON格式的规范性要求极高。

核心机制:严格的JSON格式校验

jQuery.parseJSON() 的工作很简单:接收一个JSON格式的字符串作为输入,返回一个对应的JavaScript对象。但关键就在于,这个输入的字符串必须严格遵守JSON标准,否则它会直接抛出一个JS异常,让你的代码停摆。

这和JavaScript原生的 JSON.parse() 行为一致。但很多开发者在刚接触时,常会拿着看起来像JSON、实则不合规的字符串去解析,然后一头雾水。

为什么不用 eval() 而要用 parseJSON()

这里我想插入一点个人经验。早些年,有些教程会教人用 eval() 来把字符串转成对象,写法是 eval('(' + jsonString + ')')千万别这么做。 eval() 会执行字符串里的任何JavaScript代码,如果字符串里被恶意注入了可执行脚本,等于直接把安全隐患放进了大门。jQuery.parseJSON() 在内部做了安全的转换校验,它只认纯粹的数据结构,遇到非JSON的代码逻辑就直接报异常,这个安全守卫的价值远大于方法本身。

那些会触发异常的畸形JSON

理解什么是错误的格式,比知道怎么用更重要。下面这些字符串,传进 jQuery.parseJSON() 都会导致异常:

  • {id: 01} —— 属性名 id 必须用双引号包裹,写成 "id"。不加引号在JSON规范里是非法的。

  • {'id': 01} —— 单引号也不行,JSON标准只认双引号。

  • {"name": 'john'} —— 属性的值如果是字符串,同样要用双引号,'john' 是单引号,不合规。

  • ".7" —— 数字必须有整数位, "0.7" 才是合法写法。这个小细节迷惑了不少人。

  • "undefined" —— JSON里没有表示 undefined 的概念,这个字面量只能在JavaScript里用。

  • 控制字符(如制表符 \t、换行符 \n)也不能原样出现在JSON字符串中,必须转义。

个人建议是,如果不确定一个字符串是否严格合法,可以在浏览器控制台中直接用 JSON.parse() 试解析,它能报错的话,jQuery.parseJSON() 同样过不了。它们是同一套标准。

关于版本的一个特殊行为差异

如果你维护的项目还在用jQuery 1.9之前的版本,需要注意一个历史行为:当传入空字符串、null 或 undefined 时,parseJSON() 会静默返回 null,不报错。但从1.9版本开始,传入这些无效值会正常抛出异常。这一点在升级老项目时值得留意。

语法

jQuery.parseJSON(json)

参数说明

  • json — 一个符合JSON标准格式的字符串,这是唯一需要传入的参数。

实战示例:解析用户配置并展示

下面这个例子模拟一个实际的配置读取场景。我们假设从某个存储中拿到了一段用户信息的JSON字符串,然后用 parseJSON() 把它转成对象,提取数据并渲染到页面上。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery.parseJSON() 解析用户数据</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style>
  #error-msg {
    color: red;
  }
</style>
</head>
<body>

<h2>解析用户配置数据</h2>
<p id="raw-json"></p>
<button id="parseBtn">解析并显示用户信息</button>
<div id="user-info"></div>
<div id="error-msg"></div>

<script>
$(document).ready(function(){
  // 一段严格符合JSON格式的字符串
  var jsonStr = '{ "username": "alan", "level": 5, "active": true, "city": "Guangzhou"}';
  
  $("#raw-json").html("待解析的JSON字符串: <b>" + jsonStr + "</b>");
  
  $("#parseBtn").click(function() {
    // 清空之前的错误信息
    $("#error-msg").text("");
    $("#user-info").html("");
    
    try {
      // 核心步骤:用parseJSON把字符串转成对象
      var userObj = jQuery.parseJSON(jsonStr);
      
      // 把对象里的数据拼接成HTML展示出来
      var htmlContent = "<h3>解析结果:</h3>";
      htmlContent += "<p>用户名: <b>" + userObj.username + "</b></p>";
      htmlContent += "<p>等级: <b>" + userObj.level + "</b></p>";
      htmlContent += "<p>活跃状态: <b>" + (userObj.active ? "是" : "否") + "</b></p>";
      htmlContent += "<p>所在城市: <b>" + userObj.city + "</b></p>";
      
      $("#user-info").html(htmlContent);
      
    } catch(e) {
      // 如果JSON格式有误,会进入这里
      $("#error-msg").text("解析失败!请检查JSON字符串格式: " + e.message);
    }
  });
});
</script>
</body>
</html>

这个示例的要点在于 try...catch 的使用。因为 parseJSON() 在遇到格式错误时直接抛异常,所以在生产环境代码中,养成用 try...catch 包裹解析调用的习惯是必要的——你不知道从外部接收到的数据长什么样。

本节课程知识要点

  1. jQuery.parseJSON() 将一个严格合规的JSON字符串转换为JavaScript对象,校验标准与原生 JSON.parse() 一致。

  2. JSON格式的硬性要求:属性名和字符串值都必须用双引号包裹,数字不能省略整数位,不允许出现 undefined 和未转义的控制字符。

  3. 出于安全考虑,不推荐使用 eval() 方法来解析JSON数据。parseJSON() 提供了安全且专一的数据转换能力。

  4. 从jQuery 1.9开始,传入空字符串、null或undefined会抛出异常,而在更早版本中会静默返回null,进行版本兼容处理时需要留意这个行为变化。

  5. 项目开发中,解析外部输入的JSON数据时,始终配合 try...catch 使用,可以有效防止程序因数据格式错误而意外中断。

← jQuery.now():获取毫秒级时间戳的轻量方案 jQuery.inArray():数组元素定位的精准工具 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号