JSON简介
- JSON = JavaScript Object Notation:js对象标记法,是一种轻量级的数据交换格式
- JSON基于ECMAScript规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据
- JSON字符集必须是UTF-8,JSON的字符集规定必须用双引号“ ”,键名也必须用双引号“ ”
- 任何支持的数据类型都可以通过JSON来表示
- JavaScript内置了JSON的解析
- JSON本质就是字符串
<script>
var obj = {name : "OliGit", age : 20};//这是一个js对象
// console.log(obj);
// console.log(typeof obj);
var jsn = '{"name" : "OliGit", "age" : 20}';//这是一个json字符串
console.log(jsn);
console.log(typeof jsn);
</script>
JSON语法
JSON语法是JavaScript对象表示语法的子集
JSON语法规则
- 数据在键值对中
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
JSON值可以是
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true或false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
<script>
// json对象表示
{
"name":"OliGit",
"age":23
}
// JSON本质上是字符串
// js数组表示
var arr = ["OliGit", 23, true];
// json数组表示
["OliGit", 23, true]
// json数组对象组合嵌套使用
[{
"name":"aaa",
"age":22
},{
"name":"bbb",
"age":23
}]
</script>
JSON的解析和序列化
一般情况下,我们的json数据都是从服务端获取到的,获取的json数据是以字符串的形式返回的。这个字符串虽然是json格式的,但是不能被直接使用,我们必须将该字符串转化为一个js对象才能正常解析它
-
JavaScript函数eval()可用于将JSON文本转换为JavaScript对象
eval()函数可编译并执行任何JavaScript代码。这隐藏了一个潜在的安全问题。(如果JSON中 包含恶意代码也会被直接执行) -
使用JSON解析器将JSON转换为JavaScript对象是更安全的做法。JSON解析器只会识别JSON文本,而不会执行。
JSON的解析
将JSON数据转换成JS对象
语法:JSON.parse()
var obj = {name : "OliGit", age : 22};//这是一个JS对象
var jsn = '{"name" : "OliGit", "age" : 20}';//这是一个json字符串
// JSON字符串转JS对象:使用JSON.parse()方法
var json2obj = JSON.parse(jsn);
console.log(json2obj);//{name : "OliGit", age : 20}
console.log(typeof json2obj);//object
alert(json2obj.name);
JSON的序列化
将JavaScript对象转换成JSON数据(字符串)
语法:JSON.stringify()
var obj = {name : "OliGit", age : 22};//这是一个JS对象
var jsn = '{"name" : "OliGit", "age" : 20}';//这是一个json字符串
// JS对象转JSON字符串:使用JSON.stringify()方法
var obj2json = JSON.stringify(obj);
console.log(obj2json);//{"name" : "OliGit", "age" : 22}
console.log(typeof obj2json);//string
筛选对象键值
JSON.stringify(参数1, 参数2, 参数3)
:JS对象转JSON字符串
- 参数1:要转换JS对象或数组
- 参数2:(可选),数组或函数
a、如果参数2是一个数组,则仅转换数组中指定的属性
b、如果参数2为函数,则将调用该函数,并传入每个成员的键和值 - 参数3:(可选)文本缩进、空格和换行符
var obj = {name : "OliGit", age : 22, sex : "男"};//这是一个JS对象
// var obj2json = JSON.stringify(obj);
// var obj2json = JSON.stringify(obj, ["name", "sex"]);//仅转换数组中的name和sex属性
// var obj2json = JSON.stringify(obj, sex);
function sex(key, value){
if(value == "男"){
return "女";
};
return value;
}
var obj2json = JSON.stringify(obj, null, 6);//每一个数据前都有6个空格
console.log(obj2json);
console.log(typeof obj2json);
JSON.parse(参数1, 参数2)
:JSON字符串转JS对象
- 参数1:要转换JSON字符串
- 参数2:(可选)在parse函数返回之前处理结果的函数,处理每个成员的键和值
var jsn = '{"name" : "OliGit", "age" : 20, "sex" : "男"}';//这是一个json字符串
// var json2obj = JSON.parse(jsn);
var json2obj = JSON.parse(jsn, sex);
function sex(key, value){
if(value == "男"){
return "女";
};
return value;
}
console.log(json2obj);
console.log(typeof json2obj);