js 中JSON使用
来源:互联网 发布:网络用语你有毒的来源 编辑:程序博客网 时间:2024/05/10 07:23
1:JSON是一种格式,基于文本,优于轻量,用于交换数据
JSON格式别JS对象语法表现上严格在哪
先就以“键值对为表现的对象”形式上,对比下两者的不同,至于JSON还能以怎样的形式表现,对比完后再罗列。
可允许不加、加单引号、加双引号
属性值只能是数值(10进制)、
字符串(双引号)、
布尔值和null,
也可以是数组或者符合
JSON要求的对象,
不能是函数、NaN, Infinity,
-Infinity和undefined
爱啥啥逗号问题最后一个属性后面不能有逗号可以数值前导0不能用,小数点后必须有数字没限制可以看到,相对于JS对象,JSON的格式更严格,所以大部分写的JS对象是不符合JSON的格式的。
以下代码引用
var obj1 = {}; // 这只是 JS 对象
// 可把这个称做:JSON 格式的 JavaScript 对象
var obj2 = {"width":100,"height":200,"name":"rose"};
// 可把这个称做:JSON 格式的字符串
var str1 = '{"width":100,"height":200,"name":"rose"}';
// 这个可叫 JSON 格式的数组,是 JSON 的稍复杂一点的形式
var arr = [
{"width":100,"height":200,"name":"rose"},
{"width":100,"height":200,"name":"rose"},
{"width":100,"height":200,"name":"rose"},
];
// 这个可叫稍复杂一点的 JSON 格式的字符串
var str2='['+
'{"width":100,"height":200,"name":"rose"},'+
'{"width":100,"height":200,"name":"rose"},'+
'{"width":100,"height":200,"name":"rose"},'+
']';
另外,除了常见的“正常的”JSON格式,要么表现为一个对象形式{…},要么表现为一个数组形式[…],任何单独的一个10进制数值、双引号字符串、布尔值和null都是有效符合JSON格式的。
2:JSON.parse 函数:将一个字符串解析成Json对象
参数
reviver可选。 一个转换结果的函数。 将为对象的每个成员调用此函数。 如果成员包含嵌套对象,则先于父对象转换嵌套对象。 对于每个成员,会发生以下情况:
- 如果 reviver 返回一个有效值,则成员值将替换为转换后的值。
- 如果 reviver 返回它接收的相同值,则不修改成员值。
- 如果 reviver 返回 null 或 undefined,则删除了该成员。
值得注意的是这里有一个可选的第二个参数,这个参数必须是一个函数,这个函数作用在属性已经被解析但是还没返回前,将属性处理后再返回。
var friend={
"firstName": "Good",
"lastName": "Man",
"phone":{"home":"1234567","work":["7654321","999000"]}
};
//我们先将其序列化
var friendAfter=JSON.stringify(friend);
//'{"firstName":"Good","lastName":"Man","phone":{"home":"1234567","work":["7654321","999000"]}}'
//再将其解析出来,在第二个参数的函数中打印出key和value
JSON.parse(friendAfter,function(k,v){
console.log(k);
console.log(v);
console.log("----");
});
/*
firstName
Good
----
lastName
Man
----
home
1234567
----
0
7654321
----
1
999000
----
work
[]
----
phone
Object
----
Object
----
*/
3:JSON.stringify 函数:将一个对象转化为字符串
参数
replacer可选。 用于转换结果的函数或数组。
如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。 使用返回值而不是原始值。 如果此函数返回 undefined,则排除成员。 根对象的键是一个空字符串:""。
如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。 成员的转换顺序与键在数组中的顺序一样。 当 value 参数也为数组时,将忽略 replacer 数组。
space可选。 向返回值 JSON 文本添加缩进、空格和换行符以使其更易于读取。
- 如果省略 space,则将生成返回值文本,而没有任何额外空格。
- 如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格。 如果 space 大于 10,则文本缩进 10 个空格。
- 如果 space 是一个非空字符串(例如“\t”),则返回值文本在每个级别中缩进字符串中的字符。
- 如果 space 是长度大于 10 个字符的字符串,则使用前 10 个字符。
一个包含 JSON 文本的字符串。
1.1 基本使用——仅需一个参数
这个大家都会使用,传入一个JSON格式的JS对象或者数组,JSON.stringify({“name”:”Good Man”,”age”:18})返回一个字符串”{“name”:”Good Man”,”age”:18}”。
可以看到本身我们传入的这个JS对象就是符合JSON格式的,用的双引号,也没有JSON不接受的属性值,那么如果像开头那个例子中的一样,how to play?不急,我们先举简单的例子来说明这个函数的几个参数的意义,再来说这个问题。
1.2 第二个参数可以是函数,也可以是一个数组
如果第二个参数是一个函数,那么序列化过程中的每个属性都会被这个函数转化和处理
如果第二个参数是一个数组,那么只有包含在这个数组中的属性才会被序列化到最终的JSON字符串中
如果第二个参数是null,那作用上和空着没啥区别,但是不想设置第二个参数,只是想设置第三个参数的时候,就可以设置第二个参数为null
这第二个参数若是函数
var friend={
"firstName": "Good",
"lastName": "Man",
"phone":"1234567",
"age":18
};
var friendAfter=JSON.stringify(friend,function(key,value){
if(key==="phone")
return "(000)"+value;
else if(typeof value === "number")
return value + 10;
else
return value; //如果你把这个else分句删除,那么结果会是undefined
});
console.log(friendAfter);
//输出:{"firstName":"Good","lastName":"Man","phone":"(000)1234567","age":28}
如果制定了第二个参数是函数,那么这个函数必须对每一项都有返回,这个函数接受两个参数,一个键名,一个是属性值,函数必须针对每一个原来的属性值都要有新属性值的返回。
那么问题来了,如果传入的不是键值对的对象形式,而是方括号的数组形式呢?,比如上面的friend变成这样:friend=[“Jack”,”Rose”],那么这个逐属性处理的函数接收到的key和value又是什么?如果是数组形式,那么key是索引,而value是这个数组项,你可以在控制台在这个函数内部打印出来这个key和value验证。
-这第二个参数若是数组-
var friend={
"firstName": "Good",
"lastName": "Man",
"phone":"1234567",
"age":18
};
//注意下面的数组有一个值并不是上面对象的任何一个属性名
var friendAfter=JSON.stringify(friend,["firstName","address","phone"]);
console.log(friendAfter);
//{"firstName":"Good","phone":"1234567"}
//指定的“address”由于没有在原来的对象中找到而被忽略
如果第二个参数是一个数组,那么只有在数组中出现的属性才会被序列化进结果字符串,只要在这个提供的数组中找不到的属性就不会被包含进去,而这个数组中存在但是源JS对象中不存在的属性会被忽略,不会报错。
var contact = new Object();contact.firstname = "Jesper";contact.surname = "Aaberg";contact.phone = ["555-0100", "555-0120"];var memberfilter = new Array();memberfilter[0] = "surname";memberfilter[1] = "phone";var jsonText = JSON.stringify(contact, memberfilter, "\t");document.write(jsonText);// Output:// { "surname": "Aaberg", "phone": [ "555-0100", "555-0120" ] }
- js 中JSON使用
- JS中JSON的使用
- JS中Json 使用详解
- js中json的使用
- js中json使用心得
- js使用eval解析json(js中使用json)
- js中json使用以及java中json使用
- js中 JSON的使用全解
- JavaScript中解析JSON --- json.js 、 json2.js 以及 json3.js的使用区别
- JSON 数据格式,js中怎么读取json 数据,java中怎么使用json
- [Json] JS中Json操作
- 项目中使用js回显ztree使用json格式
- JS/JavaScript中解析JSON --- JSON.parse()、JSON.stringify()以及$.parseJSON()使用详解
- JS中JSON解析
- JS中JSON 简介
- js中遍历json
- js中json例子
- JS中json操作
- 算法细节系列(5):二分查找应用
- 题目1432:叠筐 九度OJ
- numpy的ndarray与pandas的series和dataframe之间互转
- 【TeamTalk】login_server之自定义网络库netlib
- LruCache 防止图片OOM
- js 中JSON使用
- I have a dream
- CSDN学霸课表——把Word的默认背景颜色由白色改为绿色
- thinkphp中msubstr的使用
- js根据IP地址判断城市
- 谱分析
- CSS设置了正确的背景图片位置,网页上却显示不出来?
- CSS的综合应用
- 对1+2+3+4……+99+100结果的业务实现思考