JSON原来这么简单

JSON 是一种轻量级的数据格式,可以方便的表示复杂的数据结构。

一个 JSON 文件中可以表示字符串、数值、对象( JSON对象 )、数组、布尔值、null,不可以表示undefined、函数和日期

{
  "name" : "jingzhao",
  "age" : 30,
  "info" : {
    "weight" : 155
  },
  "hobbies": [ "read", "eat" ],
  "marriage" : true,
  "video" : null
}

语法

  1. 简单值

    一个 JSON 文件可以是字符串、数值、布尔值、null

    "this is JSON txt"
    
  2. 对象

    整个文件最外层是{}

    {
    	"name" : "jingzhao",
      "age" : 30
    }
    
  3. 数组

    整个文件最外层是[]

    ["read", "eat"]
    

JavaScript字面量与JSON区别

  1. JSON文件中key需要双引号包裹(重要重要很重要),最后也不需要分号

    {
    	"name" : "jingzhao"
    }
    

    JavaScript字面量中key可以不加引号,value可以是单引号,分号可加可不加

    {
      name: 'jingzhao'
    }
    
  2. JSON中没有变量

    {
    	"name" : "jingzhao"
    }
    

    Javascript字面量需要一个变量存储

    const you = {
    	"name" : "jingzhao"
    }
    

JavaScript的JSON对象

  1. JavaScript对象序列化为JSON字符串

    JSON.stringify(value[, replacer[, space]])
    
    • value (要序列化的对象)

      let you = {
        "name" : "jingzhao"
      }
      let jsonText = JSON.stringify(you);
      
    • replacer (处理器,可以是数组或者函数)

      let you = {
        "name" : "jingzhao",
        "age" : 30,
        "info" : {
          "weight" : 155
        },
        "hobbies": [ "read", "eat" ],
        "marriage" : true,
        "video" : null
      }
      
      let jsonText1 = JSON.stringify(you,['name','age']);
      let jsonText2 = JSON.stringify(you,(key,value)=>{
           if (typeof value === 'string') {
             return undefined;
           }
           return value;
      });
      
    • space 设置缩进(同时插入换行符),默认是输出不包含空格或缩进的 (缩进最大值会变为 10)

      let you = {
        "name" : "jingzhao",
        "age" : 30,
        "info" : {
          "weight" : 155
        },
        "hobbies": [ "read", "eat" ],
        "marriage" : true,
        "video" : null
      }
      let jsonText1 = JSON.stringify(you,null,4);
      

      还可以插入字符,一般不会用到

      let you = {
        "name" : "jingzhao",
        "age" : 30,
        "info" : {
          "weight" : 155
        },
        "hobbies": [ "read", "eat" ],
        "marriage" : true,
        "video" : null
      }
      let jsonText1 = JSON.stringify(you,null,'->->');
      

      自定义toJSON方法,不能用箭头函数

      var obj = {
          data: 'data',
          toJSON (key) {
              if (key)
                  return `Now I am a nested object under key '${key}'`;
              else
                  return this;
          }
      };
      
      JSON.stringify(obj);
      // '{"data":"data"}'
      
      JSON.stringify({ obj });
      // '{"obj":"Now I am a nested object under key 'obj'"}'
      
      JSON.stringify([ obj ]);
      // '["Now I am a nested object under key '0'"]'
      
  2. JSON 字符串解析为 JavaScript 对象

    JSON.parse(text[, reviver])
    
    • text (JSON对象字符串 ,格式不对会报错)

      JSON.parse('[1, 2, 3, 4, ]'); // 报错
      JSON.parse('{"foo" : 1, }'); // 报错
      JSON.parse("{'foo': 1}"); // 报错
      
    • reviver (还原函数)

      JSON.parse('{"p": 5}', (key, value) =>
        typeof value === 'number'
          ? value * 2 // return value * 2 for numbers
          : value     // return everything else unchanged
      );
      

      还原函数返回undefined删除相应的key

      const aaa = JSON.parse('{"p": 5,"a": "string"}', (key, value) =>{
          if(typeof value === "string"){
              return undefined
          }else{
              return value
          }
      });
      // { p: 5 }
      
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值