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字符转对象的操作!这点是非常重要的!

 

 

posted @ 2015-08-11 18:55  TodayCC  阅读(144)  评论(0)    收藏  举报