JSON必知必会

1. JSON简介

1.1 什么是JSON

JSON(JavaScript Object Notation),即JS对象表示法,是一种通用的、轻量级的数据表示格式,常见于服务端和客户端的数据交互,也可用于数据保存。

因为与JavaScript中对象(object)的写法很类似,所以得名。

JSON不是一种编程语言,而是一种数据表示格式。

1.2 JSON的特点

  • 便于阅读和编辑、体积小、解析快

    相较于另一种使用比较广泛的数据表示格式XMLJSON是比较容易阅读和编辑的,其体积相对较小,解析速度也快

  • 独立于任何的编程语言

    并不是名字中有JavaScript,就认为JSON只在JavaScipt中使用,JSON是与编程语言相互独立的一种数据表示格式,几乎所有的编程语言都支持JSON

  • 网络传输中使用最高的一种数据格式

    基于以上特点,很多服务器/客户端的应用中,都选择JSON作为数据格式

1.3 JSON解决了什么问题

思考一个实际的案例:基于服务器/客户端的应用中,假设需要进行数据传输,那么如何定义数据格式呢?一般服务端使用C++语言编写,构造了一个数据对象:

class Person
{
	string name;
	string gender;
	int age;
}

这时,就面临以下两个问题:

  • 客户端可以浏览器,可以是一个物联网设备,所以编程语言肯定是五花八门的,可以是JavaScript,也可以是等等,怎么将服务端数据传递给多种多样的客户端呢,不能直接发送class Person
  • 加入将来以后,需要使用Java或Go重写编写服务端,那就不能使用已经定义好的class Person

所以,需要引入一种独立于编程语言的数据表示格式,JSON就解决了这些问题,服务端和客户端都不以某一种编程语言作为限制,而是围绕一个统一的数据格式

2. JSON数据格式

重申一遍:JSON是一种通用的数据表示格式,而不是一种编程语言。接下来学习JSON的数据表示法(个人认为不能称之为语法)。

2.1 JSON对象

JSON对象采用key/value(键值)对的形式:

{
	"key1": value1,
	"key2": value2,
	"key3": value3,
	
}
  • key必须是字符串

  • value有7种类型

    • 整型

    • 浮点型

    • 字符串型

    • 布尔型

    • JSON对象型

      一个JSON对象的value可以是另一个JSON对象,即JSON对象支持嵌套

    • JSON数组型

      详见后文的JSON数组介绍,这里可以认为,JSON对象的value可以是一个数组

    • 空类型

      一种特殊类型,用null表示

  • key和value之间采用:分割

  • 每个key/value之间采用,分割

// JSON对象1
{
	"name": "Tom",
    "age": 18,
    "gender": "male",
    "hobby": {
        "hobby1": "basketball",
        "hobby2": "football"
    }
}
// JSON对象2
{
    "year": 2024,
    "description": "今年是2024年",
    “leap year”: true,
    “season”: ["spring", "summer", "autumn", "winter"],
}

2.2 JSON数组

JSON数组的格式定义:

[Item1, Item2, Item3, ...  Itemn]
  • JSON的数组比较类似C/C++中的数组,元素之间用逗号分隔

  • JSON的数组元素可以是同种类型,也可以是不同的类型

  • JSON的数组支持嵌套

[1, 2, 3, 4]
["spring", "summer", "autumn", "winter"]
[1, 2.5, "hello", true, false, null]


// 数组嵌套
[
	[1, 2, 3, 4],
	["spring", "summer", "autumn", "winter"],
	[1, 2.5, "hello", true, false, null]
]

// 数组中嵌套对象
[
    {
        "name": "Tom",
        "age": 18,
        "gender": "male"
    },
    {
        "name": "Cherry",
        "age": 30,
        "gender": "female"
    }
]

2.3 总结

  • JSON的数据类型共有7种:整型、浮点型、布尔型、字符串型、JSON对象、JSON数组、null空类型

  • JSON对象是key/value对,value可取7种类型

  • JSON数组的元素可取7种类型

  • JSON文件或者JSON字符串的根是可以是一个JSON对象,也可以是一个JSON数组,是JSON对象的居多

  • JSON对象和JSON数组两者可以说是一种你中有我,我中有你的关系,支持嵌套

{
    "name": "China",
    "info": {
        "capital": "beijing",
        "asian": true,
        "founded": 1949
    },
    "provinces": [
        {
            "name": "shandong",
            "capital": "jinan"
        },
        {
            "name": "zhejiang",
            "capital": "hangzhou"
        }
    ]
}

3. JSON的在线解析

很多网站都提供JSON在线解析的功能,百度搜索JSON在线解析工具

我比较常用的是这个:JSON在线解析及格式化验证 - JSON中文网

image-20240321145656543

4. 常用的JSCON库

C有 cJson

C++有jsoncpp

Java有 json-lib 、org-json等

Android有 Gson、FastJson等

解析及格式化验证 - JSON中文网](https://www.json.cn/jsononline/)

[外链图片转存中…(img-AFC4Atnc-1711005188155)]

4. 常用的JSCON库

C有 cJson

C++有jsoncpp

Java有 json-lib 、org-json等

Android有 Gson、FastJson等

Qt有QJson

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序匠小飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值