Login
芋圆社区 > 编程 > JavaScript > JSON解析与序列化

JSON解析与序列化

787
0
2022-10-31
2022-10-31
Hey、小怪兽


stringify()


  • • JSON.stringify(),可以将JS对象序列化成JSON对象,基本用法:
  • const data = {
        title: '芋圆社区',
        type: '博客',
        url: 'www.inhami.com',
        logo: undefined,
        person: 200
    }
    
    const jsonText = JSON.stringify(data)
    
    console.log(jsonText);
  • • 注意:JSON序列化会得到有效的JSON对象,也就是会跳过值为undefined的属性,如上data对象里的logo属性,就没有被打印
  • • stringify方法总共接收三个参数,第一个参数就是上面的data对象,第二个参数可以理解为过滤的参数,可以往里面传一个数组:
  • const data = {
        title: '芋圆社区',
        type: '博客',
        url: 'www.inhami.com',
        person: 200,
        logo: undefined,
    }
    
    // 我传了一个数组,jsonText只会包含数组中列出的对象属性
    const jsonText = JSON.stringify(data, ['title', 'person'])
    
    console.log(jsonText);
  • • 第二个参数也可以传一个方法,接收两个参数,属性名key和属性值value:
  • const data = {
        title: '芋圆社区',
        type: '博客',
        url: 'www.inhami.com',
        person: 200,
        logo: undefined,
    }
    
    const jsonText = JSON.stringify(data, (key, value) => {
        switch(key) {
            case 'type':
                return "社区";
            case 'url':
                return undefined;
            case 'person':
                return value + '人';
            default:
                return value;
        }
    })
    
    console.log(jsonText);
  • • switch匹配的时候,返回undefined同样会导致属性被忽略(比如属性值url)
  • • 第三个参数控制JSON的缩进(最大的缩进值为10),默认是没有缩进的:
  • const data = {
        title: '芋圆社区',
        type: '博客',
        person: 200,
        logo: undefined,
    }
    
    console.log(JSON.stringify(data, null, 0));
    console.log(JSON.stringify(data, null, 4));
  • • 也可以自定义缩进的字符串,同样最大缩进值是10
  • const data = {
        title: '芋圆社区',
        type: '博客',
        person: 200,
        logo: undefined,
    }
    
    console.log(JSON.stringify(data, null, '%%%%%'));
    // 因为最大缩进为10,所以10个'-'后的'$'就被截断了
    console.log(JSON.stringify(data, null, '----------$$$$$$'));

parse()


  • • JSON.parse(),可以将JSON对象解析成JS对象,基本用法:
  • const data = {
        title: '芋圆社区',
        type: '博客',
        person: 200,
        logo: undefined,
    }
    
    // 序列化
    let jsonText = JSON.stringify(data);
    // 解析
    let data_2 = JSON.parse(jsonText)
    
    console.log(data_2);
  • • 在序列化JS对象时,所有函数和原型成员都会有意地在结果中省略,data和data_2是两个完全不同的对象,在序列化的时候logo是undefined,所以被忽略了,data_2也不带有logo属性名
  • • parse方法接收两个参数,第一个就是解析的对象(也就是data),第二个是一个函数,还是有属性值key和属性名value,一般用于对JSON解析后的数据处理:
  • const data = {
        title: '芋圆社区',
        type: '博客',
        person: 200,
        logo: undefined,
    }
    
    // 序列化
    let jsonText = JSON.stringify(data);
    // 解析
    let data_2 = JSON.parse(jsonText, (key, value) => key === 'title' ? 'Hey、小怪兽' : value)
    
    console.log(data_2);

项目


  • • 后端告知会传一个JSON对象给我,一般只需要JSON.parse()解析数据就可以了:
  • JSON.parse(data)
  • • 但是有天突然报错了:
  • • 发现,传的数据并不一定是JSON对象,还可能是普通对象,parse这个方法只能解析JSON对象,解析其他的会报错,可以做点处理:
  • let data = null;
    try {
        data = JSON.parse(jsonData)
    } catch (error) {
        data = jsonData
    }
  • • 最好的办法就是不做处理,让后端改

上一篇:console.log展开值不一样

下一篇:|| 运算符的坑

Message Board
回复
回复内容不允许为空
留言字数要大于2,小于200!
提交成功,5s后刷新页面!
编程导航

Array 基础方法

Array 进阶方法 - ES6

公主连结.cysp转.skel

获取视频的第一帧

定制Console.log

WebAssembly简单案例

一些常用的方法【持续更新】

AES加密 CBC模式

滚动条滚动到底部的判断

console.log展开值不一样

JSON解析与序列化

|| 运算符的坑

对象转为字符串

call,apply,bind

获取数组中对象的某一属性值

jQuery合并ajax请求

批量命名全局变量

forEach方法

round,ceil,floor

Copyright © 2020 芋圆社区

Powered by 浙ICP备2020039309号-1

此页面不支持夜间模式!

已进入夜间模式!

已进入普通模式!

搜索框不允许为空

签到成功!经验+5!芋圆币+2!

签到失败!今日已签到!

需要登录社区账号才可以进入!

复制成功
寄,页面未加载完成或页面无锚点