‹  返回课程

Hello Nlohmann!Hello JSON!

课文
阅读量:251
技术范畴
一行 include ,轻松在你的C++程序中处理JSON!
课前导言
一行 include ,轻松在你的C++程序中处理JSON!
Hello Nlohmann!Hello JSON!
Hello JSON!简单试用 nlohmann-json库

0. JSON简介

JSON (JavaScript 对象标记,即: JavaScript Object Notation)中的 “Notation”是“标记”的意思(在XML或HTML等其它术语中,标记则被称为 “ Mark-UP”)。“标记”之意,是用来对原始数据添加说明。在计算机程序世界中,数据除了“值”以外,往往还需要有附加的“名字、类型”的信息。以 13800001111为例,如果不添中标记,则可以理解为是一个很大的整数,也可以理解成是一个手机号码。显然,在使用上二者大相径庭。

既然机“标记”,就让数据有了格式要求。比如前述例子, 我们可以约定使用类型名称加上冒号,来标记它的类型。如果使用“tel”表示电话,而“num”表示数字,则有:

  • tel:13800001111
  • num:13800001111

也可以换一个格式,比如改用()来表示:

  • (tel)13800001111
  • (num)13800001111

因此,凡是称为“标记”的数据,都可以视为带特定格式的文本。JSON就是一种拥有比较优雅、简洁、直观的格式约定;它最初用于JavaScript脚本语言,现在已经广泛用作程序之间通信的数据表达方式。

 

C++是一种编译型的程序,要表达数据,通常需要先定义类型,再由类型产生数据对象。而相关类型一经编译就不可变化。与之对比,JSON使用文本格式表达数据,并且数据本身就带有类型描述,实现“数据与类型”一体化。改变数据就是改变类型,并且因为源于文本,在程序运行时仍可随时变化。这种特性与在数据类型方面非常严谨的C++数据配合,可以让C++程序平添很大的灵活性。

 

JSON 官网:

 

1. 获取源代码

请至该开源项目的github网址https://github.com/nlohmann/json,克隆或下载以获得源代码。

 

关于github : 建议在电脑上安装git客户端,并学习如何使用git从github或国内的gitee 开源网站“克隆”开源项目。

 

如果暂时不了解git工具,刚将下载后的 ZIP 压缩文件解压,即可获得源代码。

 

nlohmann-json 采用纯头文件实现,因此,你的C++项目需要用到它时,直接 include 它即可。并且,它提供两种头文件形式,分别是:

  1. 常规多个头文件形式,相关头文件代码位于源代码目录下的 “include”之下。
  2. 单一头文件形式,即将所有头文件合并成一个超大的头文件,位于“single_include”之下。

二者并无实质区别,包括对编译速度影响。我们使用第一种,尽管是“多个头文件”,但多数情况下,仍然只需要以下一行包含即可:

#include <nlohmann/json.hpp>

2. 配置头文件查找路径

视频采用 Code::Blocks 这款跨平台IDE演示。nlomann-json库也是跨平台跨编译器的。如何在各自的IDE中配置项目中使用到的第三方库的头文件路径,请各位通过你所使用的IDE教程学习。

本课视频内容演示了在Code::Blocks中配置nlomann-json头文件查找路径的过程,但使用的是绝对路径。在实际项目开发中,如果存在团队合作,或者你需要在多台电脑上开发,则仍然需要你结合所使用的IDE或构建工具(比如CMake)加以改进。

 

通常还需要有库文件路径,但如前述,nlomann-json完全使用头文件实现,因此不需要事先编译成二进制的库。

 

3. Hello JSON!

完整代码:

#include <iostream>
#include <nlohmann/json.hpp>

using namespace std;
using Json = nlohmann::json;

int main()
{
    Json j = "Hello Niels Lohmann! Hello JSON!";
    cout << j << endl;
    
    return 0;
}

 

课后补充
请记住视频课程中特别强调的一点:程序最终输出的内容,自动带有一对双引号。下节课我们将解释这一点。