一Json定义
json是一种数据交互的文本格式,而非对象语言。
Json/jsonScript:
json是一种语法,用来序列化对象、数组、数值、字符串、布尔值和 null 。它基于 JavaScript 语法,但与之不同:JavaScript 不是 JSON,JSON 也不是 JavaScript
二.Json特点
1.JSON 是轻量级的文本数据交换格式
2.JSON 具有自我描述性,更易理解
3.JSON 采用完全独立于语言的文本格式:JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前常见的动态编程语言(PHP,JSP,.NET)都支持JSON
三.Json语法使用
1.Json键值对:
格式:key : value
注意key一般都有双引号"",value指的是类型
2.Jsonstring:
string:Json无单引号,所以即使是蛋哥字符也是用双引号表示,且表示为一个字符串
cpp//key : value "json" : "it-is-very-good"
3.json数值:
Json数值支持整型、浮点型,浮点型也可以用指数表示,但是不支持八进制和十六进制
cpp//key : value "age" : 18
4.Json对象:
Json对象是指key-value的集合,以 { 开头,以 } 结尾,每个key 和 value 中使用冒号分隔;每个 key/value 对之间使用逗号分隔,对象可以嵌套使用
cpp//json对象: {"name":"xiaoming", "age":18, "class":"201", "hobby":"篮球", "hobby":"足球", }
5.Json数组:
数组是值(value)的有序集合。一个数组以"["(左中括号)开始,"]"(右中括号)结束。值之间使用","(逗号)分隔
cpp{ "name":"xiaoming", "age":18, "hobby":["篮球","足球"] }
注意点:数组可以通过下标访问,例如:
cppsite { "name":"xiaoming", "age":18, "hobby":["篮球","足球"] }
site.hobby[1];//访问到"足球"
数组中的value也可以是对象,例如:
cppMyobj { "person":[ { "name":"lihua", "age":17 }, { "name":"zhangsan", "age":19 } ] }
6.bool与null
value也可以为bool(true,false),也可以将value设置为null
补充:Json文件后缀通常为.json
四.Json对象操作
1.对象的访问:
法一:可以通过.访问对象中的某个key,如下:
cpp//对象: MYobj { "name":"xiaoming", "age":19 } //访问: x=Myobj.name;
法二:可以通过加【】来访问,注意key要加双引号
cppMyobj { "name":"xiaoming", "age":19 } // x=Myobj["age"];
重点:如果是嵌套形式,我们也可以通过嵌套.或者[]来实现多层访问,如下:
cppMyobj { "person":{ "name1":"张三", "name2":"李四" } } //访问: //法一; x=Myobj.person.name1; //法二: y=Myobj["person"]["name1"]; //组合; z=Myobj.person["name2"];
2.对象的修改、删除:
对象的修改还是可以通过.或者[]来实现,如下:
cppMyobj { "name":"zhangsan", "age":16 } //修改; Myobj.age=19; Myobj["name"]="lisi";
如果是嵌套的,还是按照嵌套写法修改即可!
对象属性的删除:
cppMyobj { "name":"张三", "age":20 } delete Myobj.age; delete Myobj["name"];
五.Json数组操作
遍历数组:
cppMyobj { "person":[ "zhangsan", "lisi", "wangwu" ] } //遍历数组: //法一:for-in for(i in Myobj.person) { //相关操作 } //法二:for循环 for(i=0;i<Myobj["person"].length,;i++) { //相关操作 }
如果是嵌套对象,那就可以使用嵌套循环即可!
修改与删除数组:
cppMyobj { "name":"zhangsan", "age":[ 16,17,18,19 ] } //修改数组 Myobj.age[1]=10; MYobj["age"][2]=14; //删除数组元素 delete Myobj.age[3]; delete Myobj["age"][0];
六.Json函数
JSON.parse():
作用:用于把JSON字符串转换为原生的 JavaScript 值或对象
参数:' '单引号内部传递Json字符串
cpp//正确使用: JSON.parse('"zhangsan" ');//解析后为:"zhangsan" JSON.parse('18');//18 JSON.parse('[1,5,7]');//[1,5,7] var o = JSON.parse('{"name": "张三"}');//o.name为张三 //错误使用: JSON.parse("zhangsan");//无单引号 JSON.parse(" ' zhangsan' ");//单引号与双引号位置反了
JSON.parse的参数还可以为函数参数,使用如下;
cppvar o =JSON.parse('{"a":18,"b":19}',function(key,value){ if(key=="a") return value+10; if(key=="b") retrun value+100; }); o.a;//28 o.b;//119
补充;eval也可以实现JSON.parse函数的效果,但是存在安全性问题,如果大家感兴趣可以自行学习,实践中不建议使用eval
JSON.stringify():
作用:把JavaScript值(对象或者数组)序列化为JSON字符串,并返回序列化后的JSON字符串
如下:
cpp//1.数值、布尔值、字符串的包装对象,会转换成对应的原始值 JSON.stringify(1);//"1" JSON.stringify(false);//"false" JSON.stringify([1,"false",true]);//'[1,"false",true]' //2.键和值都被序列化,如果键名没有引号,会自动为它添加引号 JSON.stringify({x: 5, y: 6});//"{"x":5,"y":6}" //3.数组,会转换成数组格式 JSON.stringify([1,"false",true]);//'[1,"false",true]' //4.对象,会转换成对象格式 JSON.stringify({x: 5, y: 6}); // "{"x":5,"y":6}" //5.正则表达式和数学对象,转换成空对象的字符串形式 JSON.stringify(/foo/) // "{}" //6.日期对象和包装对象,转换成字符串 JSON.stringify(new Date()) //'"2024-10-13T10:01:35.107Z"'
如果大家感兴趣可以去学习下space参数
本文借鉴与于: JSON百科全书:学习JSON看这一篇就够了_javascript_儒雅的烤地瓜-北京城市开发者社区 (csdn.net)
最后,感谢大家的支持!!!