Windows11中VS2026使用C++ 现代化json库nlohmann
一、方式1:VS2026中直接在C++控制台项目中引入include头文件
1. 下载 nlohmann json源代码
C++ 现代化json库nlohmann的Github源代码地址为:https://github.com/nlohmann/json,官网地址为:https://json.nlohmann.me/
下载源代码:
git clone https://github.com/nlohmann/json.git
或者
bash
git clone git@github.com:nlohmann/json.git
或者直接下载源代码zip包

解压之后源代码目录结构如下:

2、VS2026中创建C++项目,并引入头文件
在Windows11上使用VS2026新建一个C++控制台项目,将下载后的E:\projects\json-develop\include目录拷贝到C++项目根目录下,无须自己手动编译动态库或静态库,使用比较简单。


对应的C++控制台源代码文件nlohmannJsonDemo.cpp内容如下:
cpp
#include <iostream>
#include "nlohmann/json.hpp"
using nlohmann::json;
// JSON for Modern C++
// https://github.com/nlohmann/json
// https://json.nlohmann.me/
// 【C++ JSON 开源库】nlohmann入门使用总结
// https://www.cnblogs.com/linuxAndMcu/p/14503341.html
// nlohmann::json库的介绍与使用
// https://shona3n.github.io/2021/cpp/json-guidance/
// 惊喜!C++ 现代化json库nlohmann更高效的使用方式
// https://zhuanlan.zhihu.com/p/671881495
// nlohmann json NLOHMANN_DEFINE_TYPE_INTRUSIVE
// https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/
// https://github.com/nlohmann/json/issues/4104
namespace Ybu {
// 首先定义一个结构体
struct Person {
std::string name;
std::string address;
int age;
};
void to_json(json& j, const Person& p) {
j = json{ {"name", p.name}, {"address", p.address}, {"age", p.age} };
}
void from_json(const json& j, Person& p) {
j.at("name").get_to(p.name);
j.at("address").get_to(p.address);
j.at("age").get_to(p.age);
}
} // namespace Ybu
int main()
{
Ybu::Person p{ "Ned Flanders", "744 Evergreen Terrace", 60 };
json j = p;
std::cout << j << std::endl;
// {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"}
// conversion: json -> Person
auto p2 = j.get<Ybu::Person>();
std::cout << "Person name: " << p2.name << ", address: " << p2.address << ", age: " << p2.age << std::endl;
// that's it
return 0;
}
Ctrl+F5运行结果如下图所示:

二、方式2:VS2026中通过NuGet包管理器安装nlohmann.json库
首先使用VS2026创建一个空的C++项目比如命名为NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_test_01,并添加一个NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_test_01.cpp的源文件,内容如下:
cpp
#include <iostream>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
using namespace nlohmann::literals;
namespace ns
{
struct person
{
std::string name;
std::string address;
int age;
};
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, address, age)
} // namespace ns
int main()
{
ns::person p = { "Ned Flanders", "744 Evergreen Terrace", 60 };
// serialization: person -> json
json j = p;
std::cout << "serialization: " << j << std::endl;
// deserialization: json -> person
json j2 = R"({"address": "742 Evergreen Terrace", "age": 40, "name": "Homer Simpson"})"_json;
auto p2 = j2.get<ns::person>();
// incomplete deserialization:
json j3 = R"({"address": "742 Evergreen Terrace", "name": "Maggie Simpson"})"_json;
try
{
auto p3 = j3.get<ns::person>();
}
catch (const json::exception& e)
{
std::cout << "deserialization failed: " << e.what() << std::endl;
}
return 0;
}

然后选中该项目并设置启动项目,鼠标右键菜单中选择【管理 NuGet 包(N)】,然后搜索nlohmann.json 包,如下图所示:

选中nlohmann.json包之后安装即可,会在项目中生成一个packages.config的文件,内容如下:
cpp
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="nlohmann.json" version="3.12.0" targetFramework="native" />
</packages>
这样看起来和C#和.Net中的包有点类似了。
当然我们可以卸载安装过的包,也可以安装其他包。
运行结果下图所示:

当然如果通过NuGet方式能够找到对应的C++库,第二种方式更简单一些,无须自己手动编译第三方源代码。
三、方式3:使用vcpkg安装nlohmann::json库
众所周知,其他高级开发语言有包管理器,比如C#有nuget,Java有maven和gradle,Python有pip,Node.js有npm和yarn。但是之前C++社区没有一个跨平台的包管理器,为此导致了一个问题:同一套代码比如我编译成win32 debug的程序无法在win64的Windows机器上运行,且debug的lib库和release版的也不兼容。
vcpkg 是跨平台的 C/C++ 包管理器。 快速获取对数千个高质量开放源代码库的访问权限,从而为应用程序提供支持,并在内部共享专用组件的集合。vcpkg 是由 Microsoft 和 C++ 社区维护的免费开源 C/C++ 包管理器,可在 Windows、macOS 和 Linux 上运行。 它是核心的 C++ 工具,使用 C++ 和 CMake 脚本编写。 它旨在解决管理 C/C++ 库的独特难题。
1. 安装vcpkg并通过vcpkg查找安装nlohmann-json库
可以从https://github.com/Microsoft/vcpkg微软官方下载vcpkg安装包
然后打开git bash命令行窗口,依次运行如下命令:
cpp
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg install nlohmann-json
安装好vcpkg后,可以通过./vcpkg.exe seatch nlohmann-json搜索nlohmann-json库,如下图所示:

找到之后,可以通过./vcpkg install nlohmann-json在vcpkg中安装nlohmann-json

2.VS2026中创建一个空的C++控制台项目并使用nlohmann_json库
在VS2026中创建一个空的C++控制台项目,添加一个nlohmannJsonDemo01.cpp的源文件,内容如下:
cpp
#include <iostream>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
using namespace nlohmann::literals;
namespace ns
{
class person
{
private:
std::string name = "John Doe";
std::string address = "123 Fake St";
int age = -1;
public:
person() = default;
person(std::string name_, std::string address_, int age_)
: name(std::move(name_)), address(std::move(address_)), age(age_)
{
}
NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(person, name, address, age)
};
} // namespace ns
int main()
{
ns::person p = { "Ned Flanders", "744 Evergreen Terrace", 60 };
// serialization: person -> json
json j = p;
std::cout << "serialization: " << j << std::endl;
// deserialization: json -> person
json j2 = R"({"address": "742 Evergreen Terrace", "age": 40, "name": "Homer Simpson"})"_json;
auto p2 = j2.get<ns::person>();
// incomplete deserialization:
json j3 = R"({"address": "742 Evergreen Terrace", "name": "Maggie Simpson"})"_json;
auto p3 = j3.get<ns::person>();
std::cout << "roundtrip: " << json(p3) << std::endl;
return 0;
}
鼠标双击打开第2行的#include <nlohmann/json.hpp>可以看到json.hpp头文件所在路径为:D:\env\vcpkg\installed\x64-windows\include\nlohmann,如下图所示:


Ctrl+F5运行上述C++控制台项目,结果如下图所示:
