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)

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

相关推荐
尘浮生2 分钟前
Java项目实战II基于微信小程序的电影院买票选座系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
不是二师兄的八戒25 分钟前
本地 PHP 和 Java 开发环境 Docker 化与配置开机自启
java·docker·php
怀澈12227 分钟前
高性能服务器模型之Reactor(单线程版本)
linux·服务器·网络·c++
爱编程的小生37 分钟前
Easyexcel(2-文件读取)
java·excel
chnming19871 小时前
STL关联式容器之set
开发语言·c++
带多刺的玫瑰1 小时前
Leecode刷题C语言之统计不是特殊数字的数字数量
java·c语言·算法
威桑1 小时前
MinGW 与 MSVC 的区别与联系及相关特性分析
c++·mingw·msvc
熬夜学编程的小王1 小时前
【C++篇】深度解析 C++ List 容器:底层设计与实现揭秘
开发语言·数据结构·c++·stl·list
yigan_Eins1 小时前
【数论】莫比乌斯函数及其反演
c++·经验分享·算法
Mr.131 小时前
什么是 C++ 中的初始化列表?它的作用是什么?初始化列表和在构造函数体内赋值有什么区别?
开发语言·c++