JSON总结篇
程序员文章站
2022-02-16 19:22:50
...
先上点干货。
一、JSON字符串与JS对象转换
在前端,经常需要请求服务器返回一些数据,这些数据是用JSON字符串来表示的。为了使用这个字符串,需要把它转换成js对象。这里介绍三种转换方式:
1.Jquery提供:
var jsobj = $.parseJSON(data);// json转js obj
2.浏览器支持的:
var jsobj = JSON.parse(data);//json
JSON.stringify(jsobj);//js obj转json
3.JS支持的:
var jsobj = eval('(' + data + ')');//json转js obj,必须加上两端的小括号。此方式存在安全隐患
二、JSON总结
JSON
JavaScript Object Notation(JS对象表示法)
JSON对象可以通过JS内建的eval()函数生成原生的JS对象。
JS对象与JSON对象:
1.JS对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔
2.JSON对象:
名称与值都要用“”括起来
VS XML:
相同之处:JSON是纯文本,具有“自我描述性”(人类可读),具有层级结构(值中存在值),可以通过JS进行解析,可使用AJAX进行传输。
不同之处:没有结束标签、更短、读写的速度更快、能够使用内建的JS eval()方法进行解析、使用数组、不使用保留字
语法:
JSON语法是JS对象表示法语法的子集:数值在名称/值对中、数据由逗号分隔、大括号保存对象、中括号保存数组。
JSON的书写格式是:名称/值对
JSON值可以是:数字、字符串、逻辑值(TRUE or FALSE)、数组(在中括号中)、对象(在大括号中)、Null
文件类型是:.json
JSON文件
JSON文件的文件类型是 ".json"
JSON文件的MIME类型是"application/json"
JSON对象
实例:
{"name":"runoob", "alexa":10000, "site":null}
JSON对象使用在大括号{}中书写。对象可以包含多个key/value(键/值)对。
key必须是字符串,value可以是合法的JSON数据类型(字符串、数字、对象、数组、布尔值或NULL)---字符串即代表要用""括起来。
key和value中使用冒号(:)分割。
每一对的key/value使用逗号(,)分割
访问对象值:
1.使用点号:myObj.name
2.使用中括号:myObj["name"]
可以使用for-in循环对象的属性。
嵌套JSON对象:
JSON对象中可以包含另一个JSON对象。
{"name":"runoob", "alexa":10000, "site":null}
可以使用点号或者中括号来访问嵌套的JSON对象。
使用delete删除对象属性。
JSON数组:
数组作为JSON对象。
["Google", "Runoob", "Taobao"]
数组在中括号中书写、
数组值必须是合法的JSON数据类型。而在JS中,数组值不仅可以使JSON数据类型,还可以是JS表达式。
JSON对象中的数组:
{
"name":"网站",
"num":3,
"sites":["Google", "Runoob", "Taobao"]
}
嵌套JSON对象中的数组
JSON对象中数组可以包含另一个数组,或者另一个JSON对象。
myObj = {
"name" : "网站" ,
"num" : 3 ,
"sites" : [
{"name" : "Google" , "info":["Android", "Google搜索" , "Google翻译"]},
{"name" : "Runoob" , "info":[...]},
{"name" : "Taobao" , "info":[...]}
]
}
JSON.parse()
JSON通常用于与服务端交换数据。
在接收服务器数据时一般是字符串。
可以使用JSON.parse()将数据转换成JS对象。
JSON.parse(text[, reviver])
说明:text:必需,一个有效的JSON字符串
reviver:可选,一个转换结果的函数,将为对象的每个成员调用此函数
JSON.stringify()
JSON通常用于与服务端交换数据
在向服务器发送数据时一般是字符串。
可以使用JSON.stringufy()将JS对象转换成字符串
JSON.stringify(value[, replacer[, space]])
参数:value:必需,一个有效的JSON字符串
replacer:可选,用于转换记过的函数或数组
space:可选,文本添加缩进、空格和换行符
JSON使用
eval()函数可编译并执行任何JS代码,这隐藏了一个潜在的安全问题。
使用JSON解析器将JSON转换成JS对象时更安全的做法。JSON解析器只能识别JSON文本,而不会编译脚本。
三、跨域访问之JSONP:
由于同源策略的影响,在从其他站点请求数据时,使用JSON是没有作用的(其他的XML、text都是不行的)。解决办法是使用JSON的变种——jsonp。
jsonp非常简单,就是在JSON外面封装一层,示例如下:
好了,此处就讲到这里。
jsonp非常简单,就是在JSON外面封装一层,示例如下:
jsonpCallback + "(" + jsonstr + ")");//jsonCallback是前端传回去的函数名,意思就是把json字符串作为参数放入函数即可。
如果发送请求的是前端,使用Ajax,那么可以按照如下写法:$.ajax({
type: "GET",
async: true,
url:"http:www.baidu.com",//替换为自己要请求的URL
dataType:"jsonp",
jsonp: 'jsonpCallback',
success: function(data) {
//针对返回数据data进行的操作;data是以json字符串的形式返回的
}
});
好了,此处就讲到这里。