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; ?>
】
相关推荐
- 如何优化Golang程序CPU性能_Golang
- c++ std::future和std::prom
- Win11怎么设置虚拟内存_Windows 11优
- Win11开始菜单打不开_修复Windows 11
- Windows10电脑怎么连接蓝牙设备_Win10
- 当网站SEO排名下降时,如何应对?
- SAX解析器是什么,它与DOM在处理大型XML文件
- C++ static_cast和dynamic_c
- MAC如何设置网卡MAC地址克隆_MAC终端修改物
- windows系统如何安装cab更新补丁_wind
- LINUX的SELinux是什么_详解LINUX强
- 如何有效拦截拼接式恶意域名的垃圾信息
- Win11怎么设置鼠标宏_Win11鼠标按键自定义
- 如何自定义Windows终端的默认配置文件?(Po
- 如何使用Golang encoding/json解
- 如何使用Golang理解结构体指针方法接收者_Go
- Win11怎么关闭自动调节亮度_Windows11
- Win11怎么设置屏保_Windows 11屏幕保
- 如何使用Golang log设置日志输出格式_Go
- Ajax提交表单PHP怎么接收_处理Ajax发送的
- Windows电脑如何截屏?(四种快捷方法)
- 如何在Golang中使用log包输出不同级别日志_
- c++的位运算怎么用 与、或、异或、移位操作详解【
- Mac的访达(Finder)怎么用_Mac文件管理
- 如何用正则表达式精确匹配最多含一个换行符的起止片段
- Win10闹钟铃声怎么自定义 Win10闹钟自定义
- php订单日志怎么按金额排序_php按订单金额排序
- 如何使用Golang构建简易投票统计功能_Gola
- Mac怎么设置鼠标滚动速度_Mac鼠标设置详细参数
- Python模块的__name__属性如何由导入方
- c++怎么使用std::filesystem遍历文
- Win11如何设置文件关联 Win11修改特定文件
- 如何在 Go 中可靠地测试含 time.Time
- Win11怎样安装剪映专业版_Win11安装剪映教
- Win11怎么关闭内容自适应亮度_Windows1
- Windows10如何查看保存的WiFi密码_Wi
- 如何在网页无标准表格标签时高效提取结构化数据
- 如何在Golang中引入测试模块_Golang测试
- 如何在Golang中实现微服务负载均衡_Golan
- Mac自带的词典App怎么用_Mac添加和使用多语
- Python异步编程高级项目教程_asyncio协
- Windows10系统怎么查看IP地址_Win10
- Win11怎么设置默认终端应用_Windows11
- php485函数怎么捕获异常_php485错误处理
- Win11怎么开启游戏模式_Win11优化游戏帧数
- C++如何解析JSON数据?(nlohmann/j
- mac怎么打开终端_MAC终端Terminal使用
- 用lighttpd能运行php吗_lighttpd
- 如何使用Golang包导出规则_控制函数和变量可见
- Windows10怎么备份注册表_Windows1

QQ客服