C++如何解析JSON数据?(nlohmann/json库示例)
技术百科
冰火之心
发布时间:2026-01-01
浏览: 次 nlohmann/json解析JSON直观高效:通过json::parse()转换字符串,支持自动类型转换;用[]访问字段、at()安全获取、value()设默认值;数组遍历用范围for循环。
用 nlohmann/json 解析 JSON 数据在 C++ 中非常直观,核心是把 JSON 字符串转为 json 类型对象,再通过键名或下标访问字段。
安装与引入
nlohmann/json 是 header-only 库,无需编译。下载 single include 文件(如 json.hpp),放入项目目录后直接包含:
#include "json.hpp"
using json = nlohmann::json;
解析字符串并读取基本字段
调用 json::parse() 将字符串转为 JSON 对象,支持自动识别对象(object)、数组(array)、字符串、数字等类型:
std::string json_str = R"({"name":"Alice","age":30,"active":true})";
json j = json::parse(json_str);
std::string name = j["name"]; // 自动转 string
int age = j["age"];
// 自动转 int
bool active = j["active"]; // 自动转 bool
安全访问嵌套结构与数组
使用 at() 可捕获不存在字段的异常;用 value() 提供默认值避免崩溃;数组用方括号加索引访问:
- std::string city = j.value("address", "Unknown"); // 无 address 则返回 "Unknown"
- json addr = j.at("address"); // 抛出 exception 若不存在
- std::string street = addr.value("street", "");
- json items = j["items"]; // 假设是数组
- for (auto& item : items) { std::cout
反序列化为自定义结构体
通过重载 from_json 函数,可将 JSON 对象自动映射到 C++ 结构体:
struct Person {
std::string name;
int age;
};
void from_json(const json& j, Person& p) {
p.name = j.at("name").get<:string>();
p.age = j.at("age").get
}
Person p = j.get
# 可将
# 不存在
# 自定义
# 若不
# 自动识别
# auto
# js
# json
# 循环
# 对象
# c++
# String
# int
# 字符串
# 抛出
# 类型转换
# Object
# 遍历
# for
# bool
# 默认值
# include
# Array
# using
# 键名
# std
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- c# await 一个已经完成的Task会发生什么
- c++ atoi和atof函数用法_c++字符数组
- 如何使用Golang编写单元测试_创建Test函数
- 如何在 Go 中正确反序列化多个同级 XML 元素
- php怎么捕获异常_trycatch结构处理运行时
- Python字符串操作教程_切片拼接与格式化详解
- Win11怎么查看硬盘型号_Windows 11检
- 如何使用Golang配置安全开发环境_防止敏感信息
- 如何在 Go 同包不同文件中正确引用结构体
- Python函数接口文档化_自动化说明【指导】
- SAX解析器是什么,它与DOM在处理大型XML文件
- PythonGIL机制理解_多线程限制解析【教程】
- 使用类变量定义字符串常量时的类型安全最佳实践
- 如何使用Golang reflect检查方法数量_
- Python与Docker容器化部署实战_镜像构建
- Python异步网络编程_aiohttp说明【指导
- Win11怎样安装网易云音乐_Win11安装网易云
- php和redis连接超时怎么办_phpredis
- Win10怎样清理C盘阿里旺旺缓存_Win10清理
- PythonWeb前后端整合项目教程_FastAP
- Golang如何避免指针逃逸_Golang逃逸分析
- VSC怎么配置PHP的Xdebug_远程调试设置步
- 如何在Golang中使用container/hea
- 如何在Golang中处理模块包路径变化_Golan
- Drupal 中渲染节点时出现 HTML 标签嵌套
- Linux怎么设置磁盘配额_Linux系统Quot
- 如何使用Golang安装API文档生成工具_快速生
- Win11如何关闭小娜Cortana Win11禁
- php订单日志怎么按状态筛选_php筛选不同状态订
- Python网页解析流程_html结构说明【指导】
- Python装饰器复用技巧_通用能力解析【教程】
- Win10怎么限制单程序CPU占用上限_Win10
- 如何解决同一段404代码在不同主机上表现不一致的问
- 零基础学会Python自动化办公_高效处理Exce
- php485读数据时阻塞怎么办_php485非阻塞
- 如何在 Python 测试中动态配置 @backo
- Win11怎么更改系统语言为中文_Windows1
- c++ std::future和std::prom
- Mac的“调度中心”与“空间”怎么用_Mac多桌面
- Win11如何设置鼠标灵敏度_Win11鼠标灵敏度
- php删除数据怎么加限制_带where条件删除避免
- Win11怎么设置屏保时间_调整Win11屏幕保护
- Linux如何安装Tomcat应用服务器_Linu
- 如何使用Golang处理静态文件缓存_提高页面加载
- 如何在同包不同文件中正确引用 Go 结构体
- php嵌入式日志记录怎么实现_php将硬件数据写入
- Win11此电脑不在桌面上_Windows 11桌
- 如何使用Golang读取日志文件_Golang b
- Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱
- 如何在Golang中引入测试模块_Golang测试

QQ客服