json

来源:互联网 发布:软件测试员招聘 编辑:程序博客网 时间:2024/05/22 09:49

1.什么是json?

   JSON全称是JavaScript Object Notation,是一种轻量级的数据交换格式。JSON 与XML具有相同的特性,是一种数据存储格式,但是JSON相比XML 更易于人编写和阅读,更易于生成和解析。

1.1什么是"JSON字符串",什么是"JSON对象",两者的区别?

a.JSON对象是直接可以使用JQuery操作的格式,如C#中可以用对象(类名)点出属性(方法)一样
b.JSON字符串仅仅只是一个字符串,一个整体,不截取的话没办法取出其中存储的数据,不能直接使用,除非你只想alert()它。


2.JSON的语法规则:

 1)数据以名称/值对的形式保存,名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值,如 :"firstName" : "John"。JSON的值可以是数字、字符串、null、true、false、数组或对象。

 2)数据有都好分隔

   3)花括号保存对象,对象可以包含多个名/值对。

   4)方括号保存数组,数组可以包含多个对象。

 5)JSON文件:

  • JSON 文件的文件类型是 ".json"
  • JSON 文本的 MIME 类型是 "application/json"

3.JSON 的两种结构:

1)键值对形式,即Name-Value对的结构结构集合(无序的 )。如:{name1:value1.name2:value2,...};

 {"name":"小明","age":"12"}

2)Array(有序的):一组有序的数据列表。例如:[value1,value2,value3,.....],其中,值可以是双引号引起来的字符串(string)、数值(number)、true、false、null、对象(object)或者数组(Array),这些结构都是可以嵌套的。如:

  例一:对象中可以包含数组

   {"root":[{"id":"001","name":"小红"},{"id":"002","name":"小明"},{"id":"003","name":"小丽"}],"total":3,"success":true}

     例二:也可以对象嵌套子对象,子对象再嵌套数组:

      {"memberList":{"lists":[{"id":"001","name":"小红"},{"id":"002","name":"小明"},{"id":"003","name":"小丽"}]}}

     例三:数组中可以包含对象:

       [{"id":"001","name":"小红"},{"id":"002","name":"小明"},{"id":"003","name":"小丽"},........]

4.JSON 的取值方式和修改方式:

  如:

var employees = [{ "firstName":"Bill" , "lastName":"Gates" },{ "firstName":"George" , "lastName":"Bush" },{ "firstName":"Thomas" , "lastName": "Carter" }];

 取值:employees[0].lastName

   修改数据:employees[0].lastName="Jobs"

 5.JSON与字符串之间的转化方法:

  JSON转换为字符串(string)格式:var string=JSON.stringify(obj);

  将Json字符串转换为JSON:

   (1)var data=JSON.parse(string);

    function strToJson(){

      return JSON.parse(str);

    }

    使用JSON.parse需严格遵守JSON规范,如属性都需要用引号引起来,否则会出错,如下:

      var str = '{name:"jack"}'; 
      var obj = JSON.parse(str); // --> parse error 

    name没有用引号引起来,使用JSON.parse所有浏览器中均抛异常,解析失败。(下面这两种方式则没有问题)

   (2)eval(string);               

    例如:function myEval(){

          var str='{"id":"001","name":"小明","age":10}';

          var obj=eval('('+str+')');

          alert(obj.toJSONString());

      }

    (3) new Function形式

      function strToJson(str){

        var json=(new Function("return"+str))();

      }

    (4)jQuery中也有将字符串转为JSON格式的方法jQuery.parseJSON( json ),接受一个标准格式的 JSON 字符串,并返回解析后的 JavaScript (JSON)对象

6.Q:什么是"JSON字符串",什么是"JSON对象",两者的区别?

a.JSON对象是直接可以使用JQuery操作的格式,如C#中可以用对象(类名)点出属性(方法)一样
b.JSON字符串仅仅只是一个字符串,一个整体,不截取的话没办法取出其中存储的数据,不能直接使用,除非你只想alert()他;

 

JSON对象:

var str2 = { "name": "deluyi", "sex": "man" };

JSON字符串:

var str1 = '{ "name": "deyuyi", "sex": "man" }';

 

Q:将"JSON字符串"转化为"JSON对象"的方法?

一:使用$.parseJSON(str)

    //由JSON字符串转换为JSON对象
    var str='{ "name": "John" }';    var obj = jQuery.parseJSON(str)    alert("1"+ obj.name);

ps:此种方式仅支持标准格式:var str='{ "name": "John" }';


二:JSON.parse(str)

        var str = '{ "name": "mady", "age": "24" }';        var obj = JSON.parse(str);        alert(obj.name);

ps:此种方式仅支持标准格式:var str='{ "name": "John" }';

 

三:使用eval('('+str+')');

复制代码
复制代码
    //由JSON字符串转换为JSON对象
    var str='{ "name": "John" }';    var obj = eval('(' + str + ')');     alert( obj.name);    var str2="{ 'name': 'John' }";    var obj2 = eval('(' + str2 + ')');     alert( obj2.name);    var str3="{ name: 'John' }";    var obj3 = eval('(' + str3 + ')');     alert( obj3.name);
复制代码
复制代码

以上均会输出结果“john”。

 

Eval方式可以转换以下标准和非标准格式字符串:

   var str="{ 'name': 'John' }";   var str2='{ "name": "John" }';   var str3="{ name: 'John' }";

 

Q:将"JSON对象"转化为"JSON字符串"的方法?

一:使用全局方法JSON.stringify()与toJSONString()

例如:

var last=obj.toJSONString(); //将JSON对象转化为JSON字符

或者

var last=JSON.stringify(obj); //将JSON对象转化为JSON字符

alert(last);

 

Q:读取JSON对象的方法?

如上面的例子:

      var str2 = { "name": "mady", "sex": "man" };

就可以这样读取:

      alert(str2.name);//和C#一样直接往出点…

弹出” mady”。

我们遇到的JSON很少有这么简单的,比如复杂一点的JSON对象如:

      var str={"GetUserPostByIdResult":{"Age":"33","ID":"2server","Name":"mady"}};

解析用:

      alert(str.GetUserPostByIdResult.Name);//一次点不出来,我多点几次

弹出:”mady”。

7.Json在Ajax中的应用 
客户端可以给服务器端通过地址栏或者post很容易的提交数据,但是服务器端处理完数据之后,将计算的结果信息回传给客户端时就存在了一定的难度,特别是 数据量较大时。这个时候数据的格式成了关键,按照某种格式可以很方便的进行数据的组装,然后可以很方便的进行解析。使用Json便是一种很好的策略。在服 务器端,按照Json的格式拼装好一个字符串,响应给客户端。客户端如何进行解析呢?一般有两种策略(两种策略的名称是自己给的名字,不一定很合理,但是 思路应该是没有问题的): 
1.直接解析 
var json = eval('(' + result + ')'); 
通过上面这个表达式,就完成了将服务器端响应给客户端的Json格式的字符串解析成了一个Json(格式的)对象,名称为“json”,通过“json.”或者“json[]”的方式便可进行数据访问。 
2.间接解析 
var json = "r=" + result; 
eval(json); 
当然上面行代码可以合并为:eval("r=" + result); 
通过上面的计算,也可以将服务器端响应给客户端的Json格式的字符串解析成了一个Json(格式的)对象,但是该对象名称为“r”,通过“r.”或者“r[]”的方式可进行数据访问。 
假如你从服务器端返回的是 json 格式的字符串: 

当你在脚本中用 eval 的方式运行: 

这时会提示 : Error: Invalid Label 
实际上,我们的 json 格式并没有错误,只是在 eval 的时候,要把你的 json 值用 “()” 括号括起来: 
> var result = eval("(" + o.responseText + ")");