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

使用TJsonObject的RemovePair方法删除嵌套JSON键不生效问题咨询

问题原因
  • 第一,C++ Builder的TJSONObject::RemovePair方法仅支持删除当前对象直接子级的键,不支持传入点分隔的嵌套路径自动层级匹配。你传入的Test.A.ins.type.id.values.test_number会被识别为根JSON对象下的一个直接子键名,你的JSON根级不存在该键,因此删除操作无效果。
  • 第二,你写的嵌套路径本身存在结构错误:参考给出的JSON结构,id是ins的直接子键,和type平级,并非type的子键,正确的层级路径应该是Test -> A -> ins -> id -> values -> test_number。
正确删除嵌套键的实现方式

需要逐层获取嵌套的JSONObject,最终定位到目标键的父对象后再执行删除操作,建议增加空指针判断避免访问异常。参考代码如下:

TJSONObject *root = (TJSONObject*) TJSONObject::ParseJSONValue(TEncoding::UTF8->GetString(id_http_wrap.msg));
if (root) {
    // 逐层获取嵌套对象
    TJSONObject* testObj = dynamic_cast<TJSONObject*>(root->GetValue("Test"));
    if (testObj) {
        TJSONObject* aObj = dynamic_cast<TJSONObject*>(testObj->GetValue("A"));
        if (aObj) {
            TJSONObject* insObj = dynamic_cast<TJSONObject*>(aObj->GetValue("ins"));
            if (insObj) {
                TJSONObject* idObj = dynamic_cast<TJSONObject*>(insObj->GetValue("id"));
                if (idObj) {
                    TJSONObject* valuesObj = dynamic_cast<TJSONObject*>(idObj->GetValue("values"));
                    if (valuesObj) {
                        // 定位到values对象后删除test_number键
                        valuesObj->RemovePair("test_number");
                    }
                }
            }
        }
    }
    // 后续输出日志等业务逻辑
    // ...
    delete root; // 用完释放ParseJSONValue返回的对象,避免内存泄漏
}

如果需要频繁操作嵌套键,可以自行封装通用工具函数,将点分路径拆分后自动逐层查找执行删除即可。


内容的提问来源于stack exchange,提问作者user2020

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:18:03