`
zhouyrt
  • 浏览: 1162659 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

新API解析JSON---Ajax之七

阅读更多

ECMAScript 5发布有段时间了,其中就包括了解析JSON的原生API-JSON.parse。许多浏览器已经支持了。

主流js库如JQuery,Ext,Prototype都优先使用JSON.parse,不支持该方法的浏览器则使用new Function或eval。

为何优先使用JSON.parse,我想一个就是性能,原生的总是要快一些吧。此外JSON.parse较eval也更安全。

这里也当然不能落后了,优先使用JSON.parse,不行再用new Function方式。最后失败了会给failure的第二个参数msg赋值为"parse json error"

 

result = function(str){
	try{
		return JSON.parse(str);
	}catch(e){
		try{
			return (new Function('return ' + str))();
		}catch(e){
			failure(xhr,'parse json error',e);
		}
	}
}(xhr.responseText);
 

源码见附件

 

PS:字符串转换成json的三种方式

 

 

分享到:
评论
8 楼 hunnuxiaobo 2010-08-21  
特殊字符能处理吗?
7 楼 enix2212 2010-08-20  
这个也是从json官网弄来的吧
6 楼 accphc 2010-08-20  
/^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")  
        .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")  
        .replace(/(?:^|:|,)(?:\s*\[)+/g

这个正则表达式
5 楼 magicbu 2010-08-19  
zhouyrt 写道
magicbu 写道
用try/catch性能会受影响,想要判断是否有JSON.parse方法,不如直接用if语句
if(JSON.parse){
  ...
} else {
  ...
}

谢谢你的提醒。

曾经也纠结过用特性判断还是try catch。

既然语言本身提供了try catch,必要的时候还是可以用的,虽然某些大牛强调禁用trycatch,甚至写进了“开发规范”。

这里考虑更大的兼容性,比如"{age:28}"用JSON.parse不能成功解析会报异常,这样就跳到了catch中,catch使用new Function解析,可以解析成功。当然如果age加上引号是没问题的。


看了一下jQuery的源码,它的parseJSON方法可能更好些~
	parseJSON: function( data ) {
		if ( typeof data !== "string" || !data ) {
			return null;
		}

		// Make sure leading/trailing whitespace is removed (IE can't handle it)
		data = jQuery.trim( data );
		
		// Make sure the incoming data is actual JSON
		// Logic borrowed from http://json.org/json2.js
		if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
			.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
			.replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {

			// Try to use the native JSON parser first
			return window.JSON && window.JSON.parse ?
				window.JSON.parse( data ) :
				(new Function("return " + data))();

		} else {
			jQuery.error( "Invalid JSON: " + data );
		}
	},
4 楼 zhouyrt 2010-08-19  
magicbu 写道
用try/catch性能会受影响,想要判断是否有JSON.parse方法,不如直接用if语句
if(JSON.parse){
  ...
} else {
  ...
}

谢谢你的提醒。

曾经也纠结过用特性判断还是try catch。

既然语言本身提供了try catch,必要的时候还是可以用的,虽然某些大牛强调禁用trycatch,甚至写进了“开发规范”。

这里考虑更大的兼容性,比如"{age:28}"用JSON.parse不能成功解析会报异常,这样就跳到了catch中,catch使用new Function解析,可以解析成功。当然如果age加上引号是没问题的。
3 楼 magicbu 2010-08-19  
用try/catch性能会受影响,想要判断是否有JSON.parse方法,不如直接用if语句
if(JSON.parse){
  ...
} else {
  ...
}
2 楼 liangrockman 2010-08-18  
不错,不错,又学到东西了,谢谢
1 楼 Andrew1945 2010-08-18  
这篇是接着上一篇的帖子的吗,多总结一点东西出来,让我们这些新手多学点。

相关推荐

    json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar

    - JSON解析:提供了解析JSON字符串的API,可以从中提取出所需数据。 - 安全性:在进行数据交换时,需要考虑防止XSS攻击,json-lib提供了相应的安全处理机制。 2. **struts2-json-plugin-2.1.8.1.jar**: - 插件...

    json-lib-2.4 jar 程序文件

    JSON-Lib是Java平台上的一个库,它提供了处理JSON数据的API,使得在Java中生成、解析和操作JSON对象变得简单。本文将详细介绍`json-lib-2.4 jar`程序文件及其在Java开发中的应用。 `json-lib-2.4 jar`是JSON-Lib的...

    json-rpc-java-1.0.zip

    服务器接收到请求后解析JSON,执行对应的方法,并返回一个JSON格式的响应,包含执行结果或错误信息。JSON-RPC相比其他远程调用协议如SOAP,具有更简洁、快速的特性。 在“json-rpc-java-1.0.zip”中,你可能会找到...

    json-lib-2.1-jdk15.jar

    1. **易用性**:json-lib提供了简单直观的API,使得开发者可以快速地学习和使用。 2. **兼容性**:由于支持多种Java数据结构,json-lib可以方便地与现有的Java代码集成。 3. **性能**:尽管JSON库众多,json-lib在...

    struts2-json-plugin-2.3.8.jar

    这个插件主要的功能是让Struts2应用程序能够轻松地处理JSON(JavaScript Object Notation)数据格式,使得Web应用可以方便地进行JSON序列化和反序列化,从而实现与前端的Ajax交互。 Struts2是一个基于Model-View-...

    json-jar包

    无论是在服务器端构建RESTful API,还是在客户端进行AJAX通信,或者是进行数据存储和交换,JSON-JAR包都能提供必要的支持。开发者可以利用这些库的功能,轻松地将Java对象转换为JSON字符串进行网络传输,或者将接收...

    struts-ajax-json-struts包

    Struts-AJAX-JSON-Struts 包是基于经典的Struts框架,为了实现AJAX(异步JavaScript和XML)和JSON(JavaScript Object Notation)交互功能而设计的一组库和资源集合。这个包通常包含了Struts框架的核心组件,以及...

    json-lib.jar

    `json-lib.jar`是一个Java库,它提供了一种在Java应用程序中解析、生成、处理JSON对象的方法。这个核心包因其易用性和高效性而受到好评,并且经过测试,证明是可靠的。 `json-lib`库支持多种Java版本,其中包括`...

    json--jar包

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它以其简洁明了的文本形式,易于人阅读和编写,同时也易于机器解析和生成。在Java编程中,JSON扮演着重要的角色,特别是在前后端数据交互时,JSON是...

    json-lib-2.3-jdk15.jar包和prototype.js及jquery-1.3.1.js

    对于JSON数据,jQuery提供了`$.getJSON()`和`$.ajax()`等方法,使得获取和解析JSON数据变得相当便捷。 在实际应用中,"json-lib-2.3-jdk15.jar"通常被用于后端服务器,处理JSON数据并以JSON格式响应前端请求。而...

    json-lib-2.4-jdk15

    通过`JsonParser`类,可以解析JSON字符串并创建相应的JSON对象。同时,`JsonWriter`类可以帮助我们生成符合JSON格式的字符串。 4. **XML与JSON互转**:在某些场景下,你可能需要在XML和JSON之间进行转换。JSON-Lib...

    ajax 解析json数据

    总结,AJAX解析JSON数据主要涉及`XMLHttpRequest`或`fetch` API的使用,通过设置响应类型和响应处理函数,我们可以方便地获取和操作JSON数据。对于新手来说,理解这些基本概念和操作是学习Web开发的重要一步。在实际...

    json.rar_JSON_JSON java_ajax json_jquery json jar_json-lib-2.2.2

    例如,使用jQuery的$.ajax或$.getJSON方法发起请求,服务器端使用这些jar包解析请求中的JSON数据,处理后返回新的JSON数据,jQuery再将其解析为JavaScript对象,更新页面内容。 总结来说,这个“json.rar”压缩包...

    java 使用json-rpc

    随着Web应用程序的发展,前后端分离的架构越来越普遍,JSON-RPC作为轻量级的远程调用协议,可以很好地解决前后端交互的问题,特别是在需要跨域调用时,JSON-RPC比传统的HTTP RESTful API更加便捷。 ### 应用前景和...

    json-lib和jsonplugin

    通过在服务器端使用`json-lib`处理JSON数据,然后通过HTTP响应返回给客户端,客户端的JavaScript代码再利用`jsonplugin`或其他JavaScript库解析JSON,从而实现了前后端的数据交互。 在实际开发中,我们需要考虑性能...

    json-lib-2.2.3-jdk15,及相关扎包

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,但不是JavaScript的一部分。JSON-Lib是Java平台上的一个库,用于处理...

    java解析json最新jar包-2014.2.25

    Java解析JSON是一个常见的任务,特别是在Web开发中,用于在服务器端和客户端之间交换数据。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易于人阅读和编写,同时也易于机器解析和生成,而被...

    JSON.rar_JSON_JSON-RPC.jar_jsonRPC.J

    在"jsonrpc.j"文件中,可能包含了JSON-RPC的相关代码示例或者API接口定义,这对于理解和使用JSON-RPC协议至关重要。 在学习和使用JSON时,你需要了解JSON的语法规则,例如如何定义对象和数组,字符串的表示方式,...

    jquery.json-2.3.js

    解析JSON($.parseJSON())是指将JSON格式的字符串转换为JavaScript对象,这对于从服务器获取数据并进行操作至关重要。例如,当你从一个RESTful API接收JSON响应时,可以使用这个函数将返回的字符串转化为可以直接...

    jQuery-Plugin-For-Easily-Readable-JSON-Data-Viewer.zip

    它基于JavaScript的一个子集,具有易于人阅读和编写,同时也易于机器解析和生成的特点。然而,原始的JSON数据通常以纯文本形式展示,对于大型、结构复杂的数据,直接查看可能会显得杂乱无章,不易于理解和分析。这时...

Global site tag (gtag.js) - Google Analytics