引言
JSON,全叫作 JavaScript Object Notion,类似于XML,YAML,Properties等,是一种数据交换格式,相比于XML,更简单,更轻量,更易理解。 JSON vs XML运用
JSON 日前被广泛做为 Web 研发中前后端数据的交换格式(尤其是 Rest API 中)。
例如百度: 百度例如b站: bilibili除此以外,JSON 还经常做为配置文件的格式。
如 VsCode的配置文件: VScode Settings如 Eslint 的配置文件: Eslint SettingsJetBrains 机构新发布的 Fleet IDE 亦运用 JSON 做为配置文件: Fleet Settings优点
总体来讲,JSON拥有两个优点:
第1,语法非常简单,如下面这个例子:
{ "name": "古月有三木"
, "university": "whu"
, "gender": "男"
, "isProgrammer": true
}
不论是研发者还是运用者,都很容易理解这个信息。
同期,又由于 JSON 是 Javascript 的子集,因此前端研发者几乎能够无痛上手,这亦是 JSON 被广泛用于前后端数据交换的原由之一。
第二,得益于 JSON 的简洁,相针对 XML,编写一个 JSON 解析器就容易的多,事实上,日前几乎所有流行的编程语言都供给了对 JSON 的解析。
数据类型
JSON 支持以下几种数据类型: String,字符串类型,强制为 UTF-8 编码Number,数值类型,支持整数、浮点数、科学计数法Boolean,布尔类型,true/falseNull,空值Array,数组,数组的值能够为 String, Number, Boolean, Null, Array 或 ObjectObject,对象类型,对象的键必须为字符串,值能够为六种类型之一。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 解析器,代码我已然完成为了,位置为A Tiny Json Parser[1] ,对此感兴趣的能够先看一下代码。
点个关注不迷路。
参考资料[1]
A Tiny Json Parser: https://github.com/Civitasv/mini-json-parser
|