繁体   English   中英

解析JSON字符串

[英]Parse JSON string

我有一个硬编码的JSON字符串。

var test = "JSON STRING HERE";

我正在使用jQuery。 我知道有一个像getJSON这样的函数,但这会产生一个AJAX调用。 我希望它解析硬编码字符串,以便我可以使用$.each(test, function(a,b){}))

感谢您的时间。

原始问题:

jQuery指出不包括可公开访问的JSON解析器或编码器。 他们希望您使用第三方库。

我推荐在json.org上托管的那个:

https://github.com/douglascrockford/JSON-js/blob/master/json2.js

或者,您可以使用Google Code上托管的jQuery-JSON插件:

http://code.google.com/p/jquery-json/


回答“为什么jQuery不能使它的解析器可用?”:

jQuery实际上并没有包含任何类型的解析器。 在jQuery代码库的AJAX部分,您可以实际看到他们在第572-579行上做了什么。

快速版本是他们实际检查你是否包含了一个外部JSON库,如json.org中的那个,如果找到它,他们会用它来解析。 如果你没有包含一个,它们会返回包含在函数中的json,有效地返回它进行评估。 非常棘手,但非常聪明!

你是否认识到,JSON的意思是“JavaScript Object Notation”? 如果你有JavaScript对象表示法硬编码,那么只需松开引号就可以解析它,因为JavaScript解析器会解决这个问题。

var jsonstr = "{prop1: 'val1', prop2: 'val2'}";
var parsed = {prop1: 'val1', prop2: 'val2'};

容易,不是吗?!! 可能有一些我不知道的东西,但对我来说很难理解人们用JavaScript编写解析器的JavaScript ...当然如果你不确定你的jsonstr来源的安全性,那么评估它开箱即用可能不是最好的主意,但万一你和你只控制源码,特别是如果你像问题中所说的那样对它进行硬编码,那么就松开引号!

以下是当数据类型设置为“json”时jQuery在ajax请求中执行的操作(这是getJSON所做的,在引擎盖下):

window["eval"]("(" + data + ")");

不幸的是,jQuery不支持使用JSON或JSONP作为数据类型的AJAX函数之外的JSON解析(反序列化与AJAX和Callback代码紧密绑定)。 你当然可以做一个

var obj = eval(test);

但这绝对不是推荐的方式(除非你确定你的字符串只是一个JavaScript对象,而不是任意的源代码)。 因此,最好的方法可能是使用另一个库,如JSON2库 (可在json.org找到 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM