You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:39:03