值得一看
广告
彩虹云商城
广告

热门广告位

c++怎么读取json文件_c++读取与解析JSON文件方法

使用nlohmann/json库可方便地在C++中解析JSON文件,需包含json.hpp头文件并通过ifstream读取文件内容,再用try-catch解析为json对象,支持通过键访问字符串、整数、数组等数据类型,并可遍历对象或处理嵌套结构。

c++怎么读取json文件_c++读取与解析json文件方法

在C++中读取和解析JSON文件,由于标准库不直接支持JSON操作,通常需要借助第三方库来完成。目前最常用且易用的库是 nlohmann/json,它是一个头文件-only的库,使用方便,语法简洁。

1. 安装与引入 nlohmann/json 库

这个库只需下载一个头文件即可使用。

方法一:通过 vcpkg 或 conan 包管理器安装(推荐)

  • 使用 vcpkg: vcpkg install nlohmann-json
  • 使用 conan: 添加 nlohmann_json 到依赖

方法二:手动引入头文件

  • 从 GitHub 下载单头文件版本:https://www.php.cn/link/3218b56a27cc5d3acdac4a6b99195f75
  • json.hpp 放入项目 include 目录
  • 在代码中包含:#include "json.hpp"

2. 读取并解析 JSON 文件

以下是一个完整的示例,展示如何读取本地 JSON 文件并解析内容。

立即学习“C++免费学习笔记(深入)”;

#include <iostream>
#include <fstream>
#include <string>
#include "json.hpp"
// 使用命名空间简化代码
using json = nlohmann::json;
int main() {
// 打开 JSON 文件
std::ifstream file("config.json");
// 检查文件是否打开成功
if (!file.is_open()) {
std::cerr << "无法打开文件 config.json" << std::endl;
return -1;
}
// 将文件内容解析为 JSON 对象
json j;
try {
file >> j;
} catch (const std::exception& e) {
std::cerr << "JSON 解析失败:" << e.what() << std::endl;
return -1;
}
// 关闭文件
file.close();
// 访问 JSON 数据(假设是对象类型)
if (j.contains("name")) {
std::cout << "姓名: " << j["name"].get<std::string>() << std::endl;
}
if (j.contains("age")) {
std::cout << "年龄: " << j["age"].get<int>() << std::endl;
}
// 如果有数组字段
if (j.contains("hobbies") && j["hobbies"].is_array()) {
std::cout << "兴趣爱好: ";
for (const auto& hobby : j["hobbies"]) {
std::cout << hobby.get<std::string>() << " ";
}
std::cout << std::endl;
}
return 0;
}

对应的 config.json 示例内容:

Find JSON Path Online

Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online30

查看详情
Find JSON Path Online

“`json
{
“name”: “张三”,
“age”: 25,
“hobbies”: [“读书”, “游泳”, “编程”]
}
“`

3. 常见操作说明

  • 判断键是否存在:使用 j.contains("key")
  • 获取不同数据类型:.get<t>()</t> 方法,如 get<int>()</int>get<bool>()</bool>get<:string>()</:string>
  • 处理嵌套对象:可以链式访问,如 j["address"]["city"]
  • 遍历 JSON 对象:

    for (auto& [key, value] : j.items()) {
    std::cout << key << " = " << value << std::endl;
    }

4. 编译方式(g++ 示例)

确保包含正确的路径:

g++ -std=c++17 main.cpp -o read_json

如果使用了包管理器,可能还需要链接或指定 include 路径。

基本上就这些。nlohmann/json 让 C++ 处理 JSON 变得非常直观,适合大多数中小型项目使用。

相关标签:

c++ json js git github ai ios stream 标准库 json 数据类型 include try catch 字符串 ifstream 对象 github https

大家都在看:

c++如何获取系统当前精确时间 _c++获取系统时间的多种方法
c++中什么是SFINAE_c++模板SFINAE机制详解
C语言中volatile关键字怎么用C语言volatile在多线程中的作用
C#中如何配置数据库命令的超时时间?在哪里设置?
C#中如何执行跨数据库查询?需要什么配置?
温馨提示: 本文最后更新于2025-10-20 22:29:14,某些文章具有时效性,若有错误或已失效,请在下方留言或联系在线客服
文章版权声明 1 本网站名称: 创客网
2 本站永久网址:https://new.ie310.com
1 本文采用非商业性使用-相同方式共享 4.0 国际许可协议[CC BY-NC-SA]进行授权
2 本站所有内容仅供参考,分享出来是为了可以给大家提供新的思路。
3 互联网转载资源会有一些其他联系方式,请大家不要盲目相信,被骗本站概不负责!
4 本网站只做项目揭秘,无法一对一教学指导,每篇文章内都含项目全套的教程讲解,请仔细阅读。
5 本站分享的所有平台仅供展示,本站不对平台真实性负责,站长建议大家自己根据项目关键词自己选择平台。
6 因为文章发布时间和您阅读文章时间存在时间差,所以有些项目红利期可能已经过了,能不能赚钱需要自己判断。
7 本网站仅做资源分享,不做任何收益保障,创业公司上收费几百上千的项目我免费分享出来的,希望大家可以认真学习。
8 本站所有资料均来自互联网公开分享,并不代表本站立场,如不慎侵犯到您的版权利益,请联系79283999@qq.com删除。

本站资料仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
THE END
喜欢就支持一下吧
点赞9赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容