JSON详解

本文详细介绍了JSON数据格式的基本概念,包括其能表示的三种类型值及其特点,并深入探讨了JSON的两个核心操作方法:序列化(stringify)和解析(parse)。通过具体的示例代码展示了如何使用这些方法来处理复杂的JavaScript对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.JSON可以表示三种类型的值:

    (1)、简单值:可以表示字符串、数值、布尔值和null。 但不支持undefined; 如:5,"hello world"都可以用JSON表示

    (2)、对象:一种复杂数据类型,表示一组无序的键值对;

    (3)、数组:复杂数据类型,有序的数值列表;


2.JSON的操作方法:解析与序列化

     stringify(),parse(),parse()都是将JSON字符串解析为原生JavaScript对象,stringify()则是将JavaScript对象序列化为JSON字符串。

    (1)、序列化

       stringify(obj[,strainer[,num_or_str]]) : 该方法有三个参数,第一个必须,后两个可选;

            obj : 将要被序列化的js对象;

            strainer: 过滤器,可以是数组,也可以是方法,若没有就用null;

            num_or_str: 缩进选择,若是数字,则直接缩进多少个空格,若是字符串,则以该字符串为格式缩进

    

/**
 *stringify()
 */
let js_obj = {
    name: '张三',
    age: 25,
    id: 110,
    pra_obj: {
        name: 'lisi',
        tel: 119
    }
};
//传入一个参数
    let s_1 = JSON.stringify(js_obj);
    console.log(s_1);  //{"name":"张三","age":25,"id":110,"pra_obj":{"name":"lisi","tel":119}}
    console.log(typeof s_1);  //string

//传入两个参数(根据对象一层一层的过滤)
//数组
    let s_2_a = JSON.stringify(js_obj, ['name', 'id', 'pra_obj']);
    console.log(s_2_a);  //{"name":"张三","id":110,"pra_obj":{"name":"lisi"}}
//函数
    let s_2_f = JSON.stringify(js_obj, function(key, val){
        console.log(key+'-----'+val);
        switch (key) {
            case 'name' :
                return '我的名字是';
            case 'id' :
                return '我的id';
            default :
                return val
        }
    });
    console.log(s_2_f);  //{"name":"我的名字是","age":25,"id":"我的id","pra_obj":{"name":"我的名字是","tel":119}}

//传入三个参数
let s_3_n = JSON.stringify(js_obj, null, 4);
console.log(s_3_n);
/*
    {
        "name": "张三",
        "age": 25,
        "id": 110,
        "pra_obj": {
            "name": "lisi",
            "tel": 119
        }
    }
 */

let s_3_s = JSON.stringify(js_obj, null, '---lala');
console.log(s_3_s);
/*
    {
    ---lala"name": "张三",
    ---lala"age": 25,
    ---lala"id": 110,
    ---lala"pra_obj": {
    ---lala---lala"name": "lisi",
    ---lala---lala"tel": 119
    ---lala}
    }
 */


    (2)、解析

        parse(JSON_str[,revier]); 两个参数,第一个必须,第二个可选

            JSON_str : JSON字符串;

            revier: 还原函数

/**
 *parse()
 */
let js_obj = {
    name: '张三',
    age: 25,
    id: 110,
    pra_obj: {
        name: 'lisi',
        tel: 119
    },
    date : new Date()
};
let s_1 = JSON.stringify(js_obj);
console.log(s_1);
//一个参数
let obj_1 = JSON.parse(s_1);
console.log(obj_1);  //{name: "张三", age: 25, id: 110, pra_obj: {…}, date: "2018-05-08T15:35:27.415Z"}

//两个参数
let obj_2 = JSON.parse(s_1,function (key,val) {
    console.log(key+'------'+val);
    if(key === 'date'){
        return '现在的时间是:-----'+new Date()
    }else {
        return val
    }
});
console.log(obj_2);  //{name: "张三", age: 25, id: 110, pra_obj: {…}, date: "现在的时间是:-----Tue May 08 2018 23:57:07 GMT+0800 (中国标准时间)"}


    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值