JSON

JSON是什么??(可参考JS高级程序设计第4版第703页)

一种存储数据的数据格式

可以理解为类似数组的数据格式,栗子:

<script>
    var json = {a: 1, b: 2, c: 3};
    var arr = [3, 4, 5,];

    console.log(json.a);
    console.log(json['a']);
    console.log(arr[0]);
  </script>

运行结果: 1 
                   1
                   3

JSON和数组的差别:   
1、JSON的下标是字符串,数组的下标是数字
2、还有个区别,数组有length,但JSON没有。

说到没有length属性,那么就得聊到for循环。
数组循环很简单,就是

for(let i=0; i<arr.length; i++){  
    console.log(arr[i]);  
}

还可以用for-in方法:

for( let i in arr) {
    console.log(arr[i]);
}

那么JSON就可以用for-in

for( let i in json) {
    console.log("json[i]");
}

 

JSON对象

JSON中必须使用双引号,而且属性名要用双引号包围起来

JS标准对象字面量:

let object = {
    name: "liang",
    age: 18
};

JSON表示:

let object {
    "name": "liang";
    "age": 18
};

 

 

JSON的迅速流行,不仅是因为它的语法与JS相似,很大程度上还因为JSON可直接被解析为可用的JS对象。与解析为DOM文档的XML相比,这个优势非常明显。

栗子: 用JSON获取第三本书的书名:

books[2].title

解析为DOM的XML:

document.getElementByTagName("books")[2].getAttribute("title");

 

 

JSON对象的两个方法

1、JSON.stringfy() (序列化,替代函数)

把一个JS对象序列化为一个JSON对象。默认情况下,输出不包含空格或缩进的JSON字符串,并且值为undefined的任何属性会被跳过。

栗子:

let lee = {
    name: "梁什么鸭",
    Englishname: "Lee",
    age: 18,
    appearance: [
        hair: "short",
        stature: "163cm"
    ]
};
let jsonText = JSON.stringfy(lee);

jsonText的值: { "name": "梁什么鸭",  "Englishname": "Lee",  "age": 18,  "appearance": [  "shorhairt",  q"163cm" ]  }


 

stringfy()可以传入三个参数:
第一个是要序列化的对象名
第二个是要从序列化对象中获取的属性键值对
第三个是缩进格数或缩进方式:
    即若传入的是一个数字,那么就是缩进的空格数(最大缩进值为10,大于10的值会自动设置为10);
    若传入的是一个字符串,那么就是以这个字符串进行缩进。

toJson方法

有时,对象需要在JSON.stringfy()上自定义JSON序列化。
此时,可在要序列化对象中添加toJSON()方法,序列化时会基于这个方法返回适当的JSON表示,栗子:

let lee = {
    name: "梁什么鸭",
    Englishname: "Lee",
    age: 18,
    appearance: [
        hair: "short",
        stature: "163cm"
    ],
    toJSON: function() {
        return this.name;
    }
};
let jsonText = JSON.stringfy(lee);

jsonText的值为 “梁什么鸭”。


 

2、JSON.parse() (解析,还原函数)

会对每个键值对都调用一次。

如果返回undefined,结果中就会删除响应的键,如果返回其他值,该值就会称为相应键的值插入到结果中,常用于把日期字符串转换为Date对象。

栗子:

let lee = {
    name: "梁什么鸭",
    Englishname: "Lee",
    age: 18,
    appearance: [
        hair: "short",
        stature: "163cm"
    ]
    releaseDate:new Date(2021, 5 , 3)
};
let jsonText = JSON.stringfy(lee);
let leeCopy = JSON.parse(jsonText, 
    (key, value) => key == ""releaseDate" ? new Date(value) : value);
alert(leeCopy.releaseDate.getFullYear());   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梁什么鸭,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值