当前位置: 首页 > news >正文

快速入门 JSON 数据格式

引言

JSON,全称 JavaScript Object Notion,类似于XML,YAML,Properties等,是一种数据交换格式,相比于XML,更简单,更轻量,更容易理解。

图片

JSON vs XML

使用

JSON 目前被广泛作为 Web 开发中前后端数据的交换格式(尤其是 Rest API 中)。

例如百度:

图片

百度

例如b站:

图片

bilibili

除此以外,JSON 还经常作为配置文件的格式。

如 VsCode的配置文件:

图片

VScode Settings

如 Eslint 的配置文件:

图片

Eslint Settings

JetBrains 公司新发布的 Fleet IDE 也使用 JSON 作为配置文件:

图片

Fleet Settings

优点

总体来说,JSON具有两个优点:

第一,语法十分简单,如下面这个例子:

{
  "name":          "古月有三木",
  "university":    "whu",
  "gender":        "男",
  "isProgrammer":  true
}

不论是开发者还是使用者,都很容易理解这个信息。

同时,又因为 JSON 是 Javascript 的子集,所以前端开发者几乎可以无痛上手,这也是 JSON 被广泛用于前后端数据交换的原因之一。

第二,得益于 JSON 的简洁,相对于 XML,编写一个 JSON 解析器就容易的多,事实上,目前几乎所有流行的编程语言都提供了对 JSON 的解析。

数据类型

JSON 支持以下几种数据类型:

  1. String,字符串类型,强制为 UTF-8 编码

  2. Number,数值类型,支持整数、浮点数、科学计数法

  3. Boolean,布尔类型,true/false

  4. Null,空值

  5. Array,数组,数组的值可以为 String, Number, Boolean, Null, Array 或者 Object

  6. Object,对象类型,对象的键必须为字符串,值可以为六种类型之一。

Object

Object 是键值对的集合,格式为:

图片

Object, from json.org

其中键必须为字符串,值可以为六种类型之一,注意,键和值之间需要使用 : 隔开,不同键值对之间需要使用 , 隔开,但最后一个键值对后不能加 ,

Array

Array 是值的有序列表,格式如下:

图片

Array, from json.org

其类似于编程语言中的数组,值可以为六种类型之一,不同值之间需要使用 , 隔开,但最后一个值后面不能添加 ,

实际使用

上文已经提到,目前大多数主流语言均提供对 JSON 的解析,下面我们看几个例子。

JavaScript

JavaScript 提供了对 JSON 的原生解析方法。

const jsonStr = `
{
  "name": "Civitasv",
  "university": "Whu",
  "age": 22,
  "gender": "M",
  "isProgrammer": true
}
`

const jsonObject = JSON.parse(jsonStr) // 使用 Json.parse 解析 Json 字符串

Object.keys(jsonObject).forEach(item => {
  console.log(item, ": ", jsonObject[item])
})

console.log("==============================")

const toJsonStr = JSON.stringify(jsonObject) // 使用 Json.stringfy 将 json 对象输出为 json 字符串
console.log(toJsonStr)

Python

Python 中的 json 库提供了对  JSON 的解析方法。

import json

jsonStr = """
{
  "name": "Civitasv",
  "university": "Whu",
  "age": 22,
  "gender": "M",
  "isProgrammer": true
}
"""

jsonObject = json.loads(jsonStr) // 使用 json.loads 将 json 字符串解析为 python 对象

for item in jsonObject:
  print("{}: {}".format(item, jsonObject[item]))

print("==============================")

toJsonStr = json.dumps(jsonObject, ensure_ascii=False) // 使用 json.dumps 将 python 对象解析为 json 字符串
print(toJsonStr)

C++

C++ 中有许多的 JSON 解析库,使用 nlohmann 的 json 库介绍如下。

#include "json.hpp"
#include <string>
#include <iostream>

using json = nlohmann::json;

int main()
{
  std::string jsonStr = R"(
    {
      "name": "Civitasv",
      "university": "Whu",
      "age": 22,
      "gender": "M",
      "isProgrammer": true
    }
  )";

  json jsonObject = json::parse(jsonStr); // 使用 json::parse 解析 json 字符串

  for (auto &[key, value] : jsonObject.items())
  {
    std::cout << key << ": " << value << "\n";
  }

  std::cout << "==============================" << '\n';

  std::string toJsonStr = jsonObject.dump(); // 使用 dump 方法将 json 对象解析为字符串
  std::cout << toJsonStr << '\n';
}

结语

以上是对 JSON 数据格式以及使用方法的介绍,本质上说,JSON 只是具有一定格式的字符串,但编写方和使用方遵循相同的规范,就可以实现数据的交换了,所以,JSON 解析器就显得十分重要,我将在未来的文章中具体介绍如何使用 C++ 编写一个基本的 JSON 解析器,对此感兴趣的可以先看一下代码。

参考资料

[1]

A Tiny Json Parser: https://github.com/Civitasv/mini-json-parser

作者:古月有三木

相关文章:

  • wireshark开启对https密文抓包
  • 【工具使用-编译器】VScode(Ubuntu)使用
  • 【Android15 ShellTransitions】(九)结束动画+Android原生ANR问题分析
  • 深度学习篇---回归分类任务的损失函数
  • Git(八)如何在同一台电脑登录两个Git
  • 45 55跳跃游戏解题记录
  • static方法使用bean的方式
  • Nodejs上传文件的问题
  • 【JavaScript】JavaScript Promises实践指南
  • UE5 UE4 右键/最大化-菜单-不显示/闪/黑色/黑屏--修复方法
  • DBeaver配置postgresql数据库连接驱动
  • PHP开发者2025生存指南
  • Android 蓝牙/Wi-Fi通信协议之:经典蓝牙(BT 2.1/3.0+)介绍
  • CentOS 7 安装 EMQX (MQTT)
  • IP第一次笔记
  • 学习中学习的小tips(主要是学习苍穹外卖的一些学习)
  • MetInfo6.0.0目录遍历漏洞原理分析
  • Kubernetes 结点排水卡住的原因及解决方案
  • Python 学习路线推荐
  • JSON5 格式标准 Data Exchange Format 官方文档 中英双语
  • 上海浪琴环球马术冠军赛明日启幕!五一假期在这里感受精彩
  • 澎湃读报丨央媒头版集中刊发社论,庆祝“五一”国际劳动节
  • 美乌矿产协议签署被曝“临门一脚”时生变,美方提附加条件
  • 剑指3000亿产业规模,机器人“武林大会”背后的无锡“野望”
  • 范宇任上海宝山区副区长
  • 特朗普加征关税冲击波:美国零售、汽车、航空、科技企业纷纷预警业绩波动