JS高级开发-JSON梳理

       首先JSON是一种数据格式,我们HTTP请求交互/内容存储到JSON,可以替代的方案就是XML,或者直接文本,当然首先是使用JSON或XML,其次才是文本,因为需要考虑到存储方便以及解析方便。

  • 使用JSON主要是因为它轻量,各个平台语言都支持JSON交互、JSON解析和存储。

  • JSON常用于我们接口交互,前后端交互中,有解析速度快,方便的特点。

  • JSON常用于我们一些配置文件也是因为解析翻遍,JSON存储数据体积小等特征,而不像XML、PList(也是xml的一种)等格式,定义各种Dom节点(当然复杂的格式还是建议XML)。

 JSON语法:

  • JSON数据的书写格式是:

{key: value},[{key: value}...]。前面是键,中间是英文的“:"(冒号),然后是值。但是注意的是如果是字符串,严格来说都是英文双引号引起来的。

{"name": "张三","age": 18,"friends": ["李四","张晓儿","李宁"],"otherInfo":{"className": "高三(13)班","classTeacher": "老张"}}
  • JSON值范围

数字(整数或浮点数)、字符串(在双引号中)、逻辑值(true或false)、数组(在方括号中)、对象(在花括号中)、null

  • JSON文件说明

1、JSON文件的文件后缀是“.json”,如index.json。

2、JSON文件的MIME类型是“application/json”。


JSON使用:

       JSON最常见的用法之一,是从web服务器上读取JSON数据(作为文件或作为HttpRequest),将JSON数据转换为JavaScript对象,然后在网页中使用该数据。

举个例子:

// 模拟后台响应返回数据
var reqJson = '{"students":['
            +'{"name":"张三","age":12},'
            +'{"name":"李四","age":13}]}';

// 使用JavaScript编译器eval()函数
var obj1 = eval("("+reqJson+")"); // 不建议

var obj2 = JSON.parse(reqJson); // 建议



// 不建议使用eval()解析JSON数据的原因

var reqJson = '{"students":['
            +'{"name":"张三","schoolTime": 2020-20},'
            +'{"name":"李四","schoolTime": 2020-20}]}';

// 使用JavaScript编译器eval()函数
var obj1 = eval("("+reqJson+")"); // 不建议 计算

var obj2 = JSON.parse(reqJson); // 建议 报错

需要注意的是,在使用eval()函数时,必须把文本包围在括号中,避免语法错误。此外,还需要注意一点:eval()函数可编译并执行任何JavaScript代码,这是一个潜在的安全问题。所以不建议使用eval()解析JSON数据。可以使用JSON.parse()替代,JSON解析器只能识别JSON文本,而不会编译脚本。

详细介绍一下JSON.parse():

      JSON.parse()是JavaScript中一个常用的JSON转换方法,JSON.parse()可以把JSON规则的字符串转换为JSONObject,JSON.parse()很方便,并且几乎支持所有浏览器。

JSON.parse()语法:

JSON.parse(text [, reviver])
// text: 需要被转换的字符串
// reviver: 可选参数,可以是一个回调方法
// 返回值: JSONObject

举几个例子:

var jsonStr = '{"name": "李三","age":13,"account": "1602783","password": "wei1027"}';

// 案例1
JSON.parse(jsonStr);
// 输出: {name: "李三", age: 13, account: "1602783", password: "wei1027"}

// 案例2
JSON.parse(jsonStr,function(key,value){console.log(text,value);})
// 输出:undefined

// 案例3
var studentNames = [];
var str = '[{"name":"张三","age":18},{"name":"张四","age":15},{"name":"张五","age":10}]';
var obj = JSON.parse(str,function(key,value){if(key == "name"){studentNames.push(value)}});
//输出:obj->undefined,studentNames-> ["张三", "张四", "张五"]

var obj = JSON.parse(str,function(key,value){if(key == "age"){return undefined;}else{return value;}});
//输出:[{"name":"张三"},{"name":"张四"},{"name":"张五"}]

// 案例4
var str = '[{"name":"张三","age":18},{"name":"张四","age":15},{"name":"张五","age":10}]';
var obj = JSON.parse(str,function(key,value){if(key == "age"){return value+"岁"}else{return value;}});
// 输出: obj->[{"name":"张三","age":"18岁"},{"name":"张四","age":"15岁"},{"name":"张五","age":"10岁"}]

详细介绍一下JSON.stringify():

      JSON.stringify()是JavaScript中一个常用的内置JSON转换方法,JSON.stringify()可以把JSONObject转化为JSON规则的字符串转换为,JSON.stringify()很方便,并且几乎支持所有浏览器。

JSON.stringify()语法:

JSON.stringify(value, [,replacer[,space]])
// value: 将要序列化成一个JSON字符串的值
// replacer: 如果是一个function,那么每个序列化成JSON的value都会经过这个function;
             如果是一个Array,那么序列化后的JSON字符串中的Key在这个数组中才会加入到返回的JSON字符串中去
// space: 用于美化JSON字符串,如果是一个Number类型,代表的就是多少个空格;
          如果是0或者小于0,那么就是没有空格(和不填此参数没有区别),如果是字符串,那么直接填充
// 返回值: 一个JSON字符串

举几个例子:

// 案例1
var json = {name:"张三",age:18};
JSON.stringify(json);

// 输出: "{"name":"张三","age":18}"
// 案例2
var json= [{"name":"张三","age":18},{"name":"张四","age":15},{"name":"张五","age":10}];

JSON.stringify(json,['name','age'],'..');


JSON.stringify(json,null,'\t');

JSON.stringify() replacer参数:

  • 如果类型为function,可以接收的参数有2个,第一个是Key,第二个是Value。如果返回undefined,该属性值不会在JSON字符串中输出。
  • 如果类型为数组,序列化结果集的Key只输出命中的,miss的属性过滤。

Ajax获取JSON数据:

  • Ajax传递JSON数据
/**
 * Ajax原生的JavaScript写法分为六步:
 * 1、创建Ajax request对象
 * 2、绑定监听回调函数
 * 3、打开一个Ajax请求
 * 4、设置请求头(setRequestHeader),按业务要求设置请求头
 * 5、发送请求
 * 6、接收请求
 *
 */

//创建ajax request对象
var request = new XMLHttpRequest();
//绑定监听回调函数
request.onreadystatechange = function(){
    //判断返回状态是否正常
    if(request.readyState === 4 && request.status === 200){
        //接收数据
        var res = request.responseText;
        //输出数据
        console.log("返回值",res);
    }else{
         console.err("错误!error!");
    }
}
/**
 *打开请求
 *第一个参数为请求方式,可选GET、POST、DELETE、UPDATE、OPTIONS等。
 *第二个参数为请求的链接,可以是相对路径和绝对路径。
 *第三个参数设置请求为同步还是异步,true为异步,false为同步。
 */
request.open("POST", "https://cdn.yinshua86.com/file/demo-json.json",true);
//设置请求头,下面设置为表单提交
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
/**
 *发送请求
 *GET请求方式:rquest.send();
 *POST请求方式:可以传参,可以是字符型的JSON或者?和&方式如下:
 *requset.send("name=Alice&age=23");
 *//这个方式如果后端接收不到参数,请把请求头改成"Content-type","application/json"
 */
//发送请求
requset.send(JSON.stringify({name:"Alice",age:23}));
  • Ajax接收JSON数据
/**
 * Ajax原生的JavaScript写法分为六步:
 * 1、创建Ajax request对象
 * 2、绑定监听回调函数
 * 3、打开一个Ajax请求
 * 4、设置请求头(setRequestHeader),按业务要求设置请求头
 * 5、发送请求
 * 6、接收请求
 *
 */

//创建ajax request对象
var request = new XMLHttpRequest();
//绑定监听回调函数
request.onreadystatechange = function(){
    //判断返回状态是否正常
    if(request.readyState === 4 && request.status === 200){
        //接收数据
        var res = request.responseText;
        //输出数据
        console.log("返回值",res);
        //如果返回来的参数是JSON,就可以直接转换
        var json = JSON.parse(res);
        console.log('返回值-转换JSON对象',json);
    }else{
         console.err("错误!error!");
    }
}
/**
 *打开请求
 *第一个参数为请求方式,可选GET、POST、DELETE、UPDATE、OPTIONS等。
 *第二个参数为请求的链接,可以是相对路径和绝对路径。
 *第三个参数设置请求为同步还是异步,true为异步,false为同步。
 */
request.open("POST", "https://cdn.yinshua86.com/file/demo-json.json",true);
//设置请求头,下面设置为表单提交
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
/**
 *发送请求
 *GET请求方式:rquest.send();
 *POST请求方式:可以传参,可以是字符型的JSON或者?和&方式如下:
 *requset.send("name=Alice&age=23");
 *//这个方式如果后端接收不到参数,请把请求头改成"Content-type","application/json"
 */
//发送请求
requset.send(JSON.stringify({name:"Alice",age:23}));

jQuery Ajax与JSON:

jQuery Ajax常用参数
名称类型规则说明
urlstring请求连接,可以是相对路径或者是绝对路径
cacheBoolean是否缓存,默认true,false为不缓存
typestring请求方式,get、post、put、delete、update、option
dataString/JSON请求的参数,可以是&拼接的方式或者JSON对象提交方式
dataTypestring预期返回的类型,可选值有,json、xml、html、script、jsonp、text
successFunction成功回调的方法
errotFunction失败回调的方式

 

 

 

 

 

 

 

 

 

$.ajax({
    url: "https://cdn.yinshua86.com/file/demo-json.json",
    cache: false,
    type: "get",
    data: {"name":"Alice","age":23},
    dataType: 'json',
    success: function(json){
        console.log("返回值-转换JSON对象",json);
    },
    error: function(e){
        //错误信息
        console.log(e.message);
    }
});

JSON格式化,美化

JSON解析地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值