如何在C语言中使用json-c库遍历JSON对象的键与值
json-c 未知键名遍历JSON对象键值对的实现方法
前置检查
首先需要先确认待遍历的节点是JSON对象类型,避免后续操作报错:
if (!json_object_is_type(your_json_obj, json_type_object)) { // 类型不匹配,处理异常逻辑 return; }
方法1:使用json_object_foreach快捷宏(推荐)
json-c 封装了专用的遍历宏,只需要声明键、值两个变量即可快速遍历,代码最简洁:
const char *key; struct json_object *val; // 遍历所有键值对 json_object_foreach(your_json_obj, key, val) { // 这里直接使用key(当前键字符串)和val(当前值对应的json对象) printf("键:%s,值类型:%s,值内容:%s\n", key, json_type_to_name(json_object_get_type(val)), json_object_to_json_string(val) ); }
方法2:使用显式迭代器(适合自定义遍历逻辑场景)
如果需要对遍历过程做更精细的控制(比如中途跳出、跳过指定规则的键等),可以直接操作迭代器接口:
struct json_object_iter iter; // 初始化迭代器指向第一个键值对 json_object_iter_init(&iter, your_json_obj); // 循环遍历直到迭代结束 while (json_object_iter_next(&iter)) { const char *key = json_object_iter_key(&iter); struct json_object *val = json_object_iter_val(&iter); // 自定义处理逻辑 // ... }
注意事项
- 遍历过程中不要修改当前JSON对象的结构(新增、删除键),否则会导致迭代器失效,触发内存访问异常
- 遍历得到的
key字符串生命周期和所属的JSON对象绑定,不需要手动释放,也不要尝试修改字符串内容 - 如果你使用的json-c版本低于0.13,需要升级到最新稳定版,旧版本的非标准遍历接口已经被废弃
内容的提问来源于stack exchange,提问作者Faris Kamal Kakkengal
相关产品推荐
相关产品推荐

