• JSON


    JSON是一种数据格式,不是一种编程语言。虽然它与有相同的语法格式,但是JSON并不从属于JavaScript。而且,并不是只有JavaScript才使用JSON。
    JSON可以表示以下三种类型的值:
    简单值:
    使用于JavaScript相同的语法,可以在JSON中表示字符串、数值、布尔值和null。
    1,"Hello World"都是有效的JSON数据。
    注:JSON字符串必须使用双引号。

    对象:
    对象作为一种复杂数据类型,表示的是一组无序的键值对。每个键值对中的值可以是简单值,也可以是复杂数据类型的值。
    以下为JavaScript中的一个对象字面量:

    1 var person={
    2     name:"dragon",
    3     age:18
    4 };

    JSON表示上述对象的方式如下:

    1 {
    2     "name":"dragon",
    3     "age":18
    4 }

    注:与JavaScript的对象字面量相比,JSON对象有两个不同的地方。
    首先,没有声明变量(JSON中没有变量的概念);其次,没有末尾的分号;最后,对象的属性必须加双引号。
    属性的值可以是简单值,也可以是复杂类型值,例如以下对象:

    1 {
    2     "name":"dragon",
    3     "age":184     "school":{
    5         "name":"nj",
    6         "location":"nanjing"
    7     }
    8 }

    该对象有三个属性:"name","age"和"school"。其中,"shcool"属性的值又是一个对象,包含"name"和"location"两个属性。

    数组:
    数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值所以来访问其中的值。数组的值可以是简单值、对象或数组。
    JSON中的第二种复杂数据类型是数组。JSON数组采用的就是JavaScript中的数组字面量形式。
    JavaScript中的数组字面量如下:

    1 var vlaues=[25,"hi",true];

    在JSON中,可以采用同样的语法表示同一个数组:

    1 [25,"hi",true]

    注:同样需要注意,JSON数组没有变量和分号。把数组和变量结合起来,组成更加复杂的数据集合。

     1 [
     2     {
     3         "title":"professional JS",
     4         "authors":[
     5             "john"
     6         ],
     7         "edition":3,
     8         "year":2011    
     9     },
    10     {
    11         "title":"professional JS",
    12         "authors":[
    13             "john"
    14         ],
    15         "edition":2,
    16         "year":2010    
    17     },
    18     {
    19         "title":"professional Ajax",
    20         "authors":[
    21             "john","tom"
    22         ],
    23         "edition":2,
    24         "year":2008
    25     }
    26 ]

    解析和序列化
    JSON对象有两个方法:stringify()和parse()。
    JSON.stringify():
    JSON.stringify()把JavaScript对象序列化为JSON字符串。
    它除了接收要序列化的JavaScript对象外,还可以接收另外两个参数。
    第一个参数为过滤器,可以是数组或者函数;第二个参数是一个选项,表示是否在JSON字符串中保留缩进。
    现有JavaScript对象如下:

    1 var book={
    2     "title":"professional JS",
    3     "authors":[
    4         "john"
    5     ],
    6     "edition":3,
    7     "year":2011    
    8  };

    1.只包含JavaScript对象

    1 var jsonText = JSON.stringify(book);
    2 alert(jsonText);                //{"title":"professional JS","authors":["john"],"edition":3,"year":2011}

    2.序列化选项:
    2.1过滤结果

    1 var jsonText=JSON.stringify(book,["title","edition"]);
    2 alert(jsonText);            //{"title":"professional JS","edition":3}

    注:JSON.stringify()的第二个参数为数组,包含"title"和"edition"。
    这两个属性与将要序列化的对象的属性相对应,并且在返回的结果中只包含这两个属性。

    2.2字符串缩进
    第三个参数是数字,则表示每个级别缩进的空格数(最大空格数为10)。例如每个级别缩进四个空格,代码如下:

    1 var jsonText=JSON.stringify(book,null,4);
    2 alert(jsonText); 

    结果如下所示:

    1 {
    2     "title":"professional JS",
    3     "authors":[
    4         "john"
    5     ],
    6     "edition":3,
    7     "year":2011    
    8 }

    第三个参数是字符串(最大长度不能超过10个字符长,否则只显示前十个字符),则该字符串被当作缩进字符,不再使用空格。

    1 var jsonText=JSON.stringify(book,null,"--");
    2 {
    3 --"title":"professional JS",
    4 --"authors":[
    5 ----"john"
    6 --],
    7 --"edition":3,
    8 --"year":2011    
    9 }

    JSON.parse():
    JSON.parse()把JSON字符串解析为原生的JavaScript值。
    它除了接收JSON字符串外,还可以接收另一个函数参数,将在每个键值对上调用。该函数包含两个参数,即一个键和一个值,并且函数需要返回一个值。
    现有JavaScript对象如下:

    1 var book={
    2     "title":"professional JS",
    3     "authors":[
    4         "john"
    5     ],
    6     "edition":3,
    7     "year":2011,
    8     "releaseDate":new Date(2011,11,1)
    9 };

    1.只包含JSON字符串

    1 var jsonText = JSON.stringify(book);
    2 var bookCopy=JSON.parse(jsonText); //此时得到与JavaScript相对应的值,不过book与bookCopy是两个独立的对象。

    2.解析选项

    1 var bookCopy=JSON.parse(jsonText,function(key,value){
    2     if(key=="releaseDate"){
    3         return new Date(value);
    4     }
    5     else{
    6         return value;
    7     }
    8 });

    此时,该回调函数作用于每个键值对上,当key为releaseDate时将返回新日期,其余不变。

  • 相关阅读:
    listview 加载性能优化 viewholder
    eclipse使用有感
    android常见的错误
    填充父窗体布局问题
    setTag()/getTag()
    自己动手实现自旋锁
    新手学信息检索6:谈谈二值独立模型
    自己动手编译、运行Java程序
    新手学信息检索5:正确率召回率与搜索引擎的评价
    新手学信息检索4:向量空间模型与相似度计算
  • 原文地址:https://www.cnblogs.com/jfl-xx/p/7259489.html
Copyright © 2020-2023  润新知