JSON全解
json(JavaScript Standard Object Notation)javascript标准对象记法,这是一种以纯文本表示JavaScript对象的方法。
JSON可以是文本和对象。
JSON对象是直接可以使用JQuery操作的格式,和js中的对象一样,可以用对象(类名)点出属性(方法)。
JSON字符串仅仅只是一个字符串,一个整体,不截取的话没办法取出其中存储的数据,不能直接使用,除非你只想alert()他;
//JSON对象: var str2 = { "name": "haorooms", "sex": "man" }; //JSON字符串: var str1 = '{ "name": "haorooms", "sex": "man" }';
从服务器或某个其他来源获取JSON数据时,就是在获取文本,不过这个文本可以很容易的转换为一个JavaScript对象。
如何从服务器的响应得到JSON数据?
服务器将响应作为JSON数据发送时,数据会作为文本通过网络传递,所以可以使用请求对象responseText属性来得到这个数据。
var jsonData = request.reponseText;
JavaScript非常擅长把文本转换为对象、函数和许多其他形式。
一、JSON字符串转换为JSON对象
1、eval()函数
eval()函数告诉javascript具体计算文本。
alert(eval("2+2")); //4
在描述一组属性名和值的文本上运行eval()时,javascript会返回这些属性和值的一个对象表示。不过,需要确保整个JSON响应串被视为一个对象。所以,在调用eval()时,要用括号把整个响应包围起来。
eval("("+JaonData+")");
问:这么说eval()会运行一段文本?
eval()取一个字符串,把它转换为一个表达式,然返回这个表达式的结果。所以,对于一个类似”2+2“的字符串,表达式就是2+2;结果是4.不过对于一个类似‘{ ”id“:"123456","price":"5623.3"}’的串,把它转换为一个表达式并执行这个表达式会得到一个新对象,而不是一个具体的答案。
问:大括号是什么?
json数据都用大括号({})包围。
问:如果已经选择了xml和文本,还需要json吗?
因为json就是javascript,所以对于javascript程序员和浏览器来说处理json会容易得多。另外,json会创建一个标准的javascript对象。而不是一个无类型的xml dom树,尽管xml响应也可以创建类似的对象,但是这需要做大量额外的工作。
JavaScript对象已经是动态的了,因为它不是编译对象。
在编译语言中,会在一个源文件中定义对象,如.java或.cpp文件,热闹后将这些文件便意味字节码,所以,一旦程序运行,就必须遵循已经编译为字节码的对象定义。如果不进行重编译,对象不会突然有一个新的属性。不过js不是编译的,这是一种解释性语言,任何时刻都可以有所改变,不仅如此,服务器发送的对象还可以在运行时创建。
js没有提供一种内置方法来确定一个值是否是数组。
function isArray(arg){ //数组都被认为是对象 if(typeof arg == "object"){ var criteria = arg.constructor.toString().match(/array/i); return (!criteria!=null); } return false; }
为了安全,json网站提供了一个json解析器,可以完成所有的这些任务
var item = JSON.parse(request.requestText);
问:难道永远都不能用eval()吗?
eval()是js中的一个重要部分,如果需要将文本数据传入另一个函数完成计算,或者在脚本之间传递,eval()非常有用,不过,如果计算你不能控制的数据,eval()可能会有问题。例如如果数据来自其他人的程序或服务器,不能提前准确地知道要计算什么,就要使用另外的方法。
问:Json解析器就能保证我的代码安全吗?
并不能,可以保证你的代码比直接使用eval安全,对于json数据,json.parse()可以确保得到合法的json数据
2、var obj = str.parseJSON(); //由JSON字符串转换为JSON对象
3、var obj = JSON.parse(str); //由JSON字符串转换为JSON对象
然后,就可以这样读取:
Alert(obj.name);
Alert(obj.sex);
特别注意:如果obj本来就是一个JSON对象,那么运用 eval()函数转换后(哪怕是多次转换)还是JSON对象,但是运用 parseJSON()函数处理后会有疑问(抛出语法异常)。
二、可以运用 toJSONString()或者全局要领 JSON.stringify()将JSON对象转化为JSON字符串。
例如:
var last=obj.toJSONString(); //将JSON对象转化为JSON字符
或者
var last=JSON.stringify(obj); //将JSON对象转化为JSON字符
alert(last);
上面的多个要领中,除了eval()函数是js自带的之外,其他的多个要领都来自json.js包。新版本的 JSON 修改了 API,将 JSON.stringify() 和 JSON.parse() 两个要领都注入到了 Javascript 的内建对象里面,前者变成了 Object.toJSONString(),而后者变成了 String.parseJSON()。如果提示找不到toJSONString()和parseJSON()要领,则说明您的json包版本太低。
上面是对javascript的简单总结,部分总结参考网络。但是很多在平时都用的到,特别是json字符转对象的操作!这点是非常重要的!

浙公网安备 33010602011771号