json笔记

前述:
Json-数据格式(不是语言,而是格式,而且并不是只有js才使用JSON)


一.json数据类型
(1)简单值


说明:和js一样,字符串,数值,布尔值,null
表示方法:如数值100,就表示为  100
字符串表示 “天元小龙”(只能用双引号,不可以用单引号)


(2)对象


说明:简单说就是键值对儿,如
name:“天元小龙”,
name是键名(属性),天元小龙为键值。
表示方法:
在以前的js中字面量表示,假设我们表示一个人,性别男,年龄1000,资产千万通常这样表示
var person={
       sex: "男",
       interest:"女",
       age: 1000
};
但在JSON表示中,要这样
{
        "sex": "男",
        "interest":"女",
        "age":1000
}
看起来js与JSON非常类似吧,但也有区别,JSON并不会像js那样用var声明变量,因为它只是一种格式。
细心的人也已经观察到,JSON的属性,如sex,interest,age,必须加双引号,且在末尾不需要加分号,这是特别需要注意的。
JSON数据格式还允许属性值取复杂数据类型,例如在加个属性,学校属性
{
        "sex": "男",
        "interest":"女",
        "age":1000,
        "school":{
                 "name":"湖南工业大学",
                 "location":"株洲市泰山西路"
             }


 (3)数组


说明:可以通过数值索引访问其中的值的数据类型
表示方法:
在js中我们表示一个小队年龄分布
var ages=[25,15,18];
在JSON中,可以采用同样的方法
[25,15,18]
注意:JSON数组中也没有变量和最后的分号。
还可以把数组与对象结合使用。
例如:有两个人,名字分别为甲和乙,甲喜欢看红楼梦、水浒传,乙喜欢看三国、西游记,甲是男人,乙是个女人,那么我们可以这样表示
[
      {
                "name":"甲",
                "sex":"男",
                "likebook":["红楼梦","水浒传"]
      },
      {
                 "name":"乙",
                 "sex":"女",
                "likebook":["三国","西游记"]
      }
]


以上是JSON所能表示的数据类型及其基本语法,接下来要说明JSON的具体应用


二.  应用
我们都知道XML语言的魅力在于,可以解析成Dom文档,但JSON却可以直接解析成js,在使用上,显然后者更方便快捷。


(1)syringify( )和parse( )概述
JSON对象有两个方法 stringify( )和parse( ),前者通俗来说把js对象变成JSON数据格式,后者是反之。
举个例子:
 var person= {
                name:"甲",
                sex:"男",
                likebook:["红楼梦","水浒传"]
      };
我们结下来的任务就是把js代码序列化为JSON字符串
首先定义一个变量text接收字符串,然后转换,代码为:
var text=JSON.stringify(person);
我能们就得到一个这样的JSON格式
{
                "name":"甲",
                "sex":"男",
                "likebook":["红楼梦","水浒传"]
      }
同样的,我们可以把这个JSON在转换为js,代码如下
var person2=JSON.parse(text);
怎么样是不是感觉很方便。


(2)stringify( )的第二和第三个参数的作用


如果我们想把js代码变为JSON是,如果我们不想知道这个人他看了什么书,我们只想知道他的名字和姓名,那也好办,只要这样
var text=JSON.stringify(book,["name","sex"]);
这样我们就得到
{
                "name":"甲",
                "sex":"男"
}
有有人说我想得到这样的JSON格式
{
      --"name":"甲",
      -- "sex":"男",
      --"likebook":["红楼梦","水浒传"]
      }
也就是说设置每个级别的缩进字符为制表符,这真的可以吗,也好做,在stringify( )中加入第三个参数,
var text=JSON.stringify(person,null,"--");
这第三个参数表示缩进个数,不能超过10,当然是可以使用制服表符代替。


(3)parse( )方法种使用还原函数的意义


最后一个说prase( )方法,前面说过如果我们想把JSON变为js需要用到,直接就可以变成js代码,那是因为我们设计到的内容都是属性,属性值,但我们没有涉及到方法,如果像这样为person添加一个方法 ,根据js面向对象的特点,我们添加一个吃Eat( )方法
 var person= {
                name:"甲",
                sex:"男",
                likebook:["红楼梦","水浒传"],
               eat:new Eat( )
      };
接下来解析为JSON格式
var text=JSON.stringify(person);
这倒是没什么问题,但如果你再把text解析为js的时候
var person2=JSON.parse(text);
就会出现问题,eat( )方法将不在是函数方法,而是字符串,那这时候就会出现问题,多亿我们需要一种方法来确保,还能把text中的eat( )方法转换为js函数,
那就需要prase( )放大的第二个参数,设置还原函数
就像这样
var person2=JSON.parse( text, function( key,value){
           If(key="eat"){
                    return new Eat( );
           }else{
                   return value;
          }
}
);

















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值