Josn使用讲解

一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":["篮球","足球"]
}

注意点:数组可以通过下标访问,例如:

cpp 复制代码
site
{
    "name":"xiaoming",
    "age":18,
    "hobby":["篮球","足球"]
}

site.hobby[1];//访问到"足球"

数组中的value也可以是对象,例如:

cpp 复制代码
Myobj
{
    "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要加双引号

cpp 复制代码
Myobj
{
    "name":"xiaoming",
    "age":19
}

//
x=Myobj["age"];

重点:如果是嵌套形式,我们也可以通过嵌套.或者[]来实现多层访问,如下:

cpp 复制代码
Myobj
{
    "person":{
        "name1":"张三",
        "name2":"李四"
         }
}
//访问:
//法一;
x=Myobj.person.name1;
//法二:
y=Myobj["person"]["name1"];
//组合;
z=Myobj.person["name2"];

2.对象的修改、删除:

对象的修改还是可以通过.或者[]来实现,如下:

cpp 复制代码
Myobj
{
    "name":"zhangsan",
    "age":16
}
//修改;
Myobj.age=19;
Myobj["name"]="lisi";

如果是嵌套的,还是按照嵌套写法修改即可!

对象属性的删除:

cpp 复制代码
Myobj
{
    "name":"张三",
    "age":20
}
delete Myobj.age;
delete Myobj["name"];


五.Json数组操作

遍历数组:

cpp 复制代码
Myobj
{
    "person":[
                "zhangsan",
                "lisi",
                "wangwu"
             ]
    
}

//遍历数组:
//法一:for-in
for(i in Myobj.person)
{
    //相关操作
}
//法二:for循环
for(i=0;i<Myobj["person"].length,;i++)
{
    //相关操作
}

如果是嵌套对象,那就可以使用嵌套循环即可!

修改与删除数组:

cpp 复制代码
Myobj
{
    "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的参数还可以为函数参数,使用如下;

cpp 复制代码
var 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)

最后,感谢大家的支持!!!

相关推荐
zquwei6 分钟前
SpringCloudGateway+Nacos注册与转发Netty+WebSocket
java·网络·分布式·后端·websocket·网络协议·spring
爱吃西瓜的小菜鸡6 分钟前
【C语言】判断回文
c语言·学习·算法
别NULL8 分钟前
机试题——疯长的草
数据结构·c++·算法
TT哇12 分钟前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
火烧屁屁啦35 分钟前
【JavaEE进阶】初始Spring Web MVC
java·spring·java-ee
w_31234541 小时前
自定义一个maven骨架 | 最佳实践
java·maven·intellij-idea
岁岁岁平安1 小时前
spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))
java·学习·spring·依赖注入·集合注入·基本数据类型注入·引用数据类型注入
武昌库里写JAVA1 小时前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
Q_19284999061 小时前
基于Spring Boot的九州美食城商户一体化系统
java·spring boot·后端
CYBEREXP20081 小时前
MacOS M3源代码编译Qt6.8.1
c++·qt·macos