gpt4 book ai didi

c++ - 如何完全删除 json 数组元素(使用 jsoncpp)

转载 作者:搜寻专家 更新时间:2023-10-31 02:14:25 78 4
gpt4 key购买 nike

我正在使用jsoncpp,我有一组数据如下,我想搜索一些节点并删除数组元素,当我删除时,它变成了{},是否可以用{}完全删除?

删除前的数据:

{
"any" : [
{
"any_id" : "a1",
"infos" : [
{
"info_id" : "i1",
"path" : "",
"version" : "1.0"
}
]
},
{
"any_id" : "a2",
"infos" : [
{
"info_id" : "i1",
"path" : "",
"version" : "1.0"
},
{
"info_id" : "i2",
"path" : "D:\\",
"version" : "1.0"
},
{
"info_id" : "i3",
"path" : "",
"version" : "1.0"
},
{
"info_id" : "i4",
"path" : "D:\\",
"version" : "1.0"
}
]
},
{
"any_id" : "a3",
"infos" : [
{
"info_id" : "i4",
"path" : "",
"version" : "1.0"
}
]
}
]
}

删除后的数据:

{
"any" : [
{
"any_id" : "a1",
"infos" : [
{
"info_id" : "i1",
"path" : "",
"version" : "1.0"
}
]
},
{
"any_id" : "a2",
"infos" : [
{
"info_id" : "i1",
"path" : "",
"version" : "1.0"
},
{
},
{
"info_id" : "i3",
"path" : "",
"version" : "1.0"
},
{
}
]
},
{
"any_id" : "a3",
"infos" : [
{
"info_id" : "i4",
"path" : "",
"version" : "1.0"
}
]
}
]
}

在 C++ 中,我有以下代码,查找 any_id 和路径以删除数组元素:

for (Json::ValueIterator &itr_any = data["any"].begin();
itr_any != data["any"].end(); ++itr_any)
{
if (0 == _stricmp((*itr_any)["any_id"].asString().c_str(), "a2"))
{
for (Json::ValueIterator &itr_res = (*itr_any)["infos"].begin();
itr_res != (*itr_any)["infos"].end(); ++itr_res)
{
if (0 == _stricmp((*itr_res)["path"].asString().c_str(), "D:\\"))
{
(*itr_res).clear();
}
}
}
}

最佳答案

使用 (*i​​tr_res).clear(); 您实际上是在清空所选数组中对象的内容。

JsonCpp API 不公开操作数组的方法,因此删除项的最简单方法是构建一个不包括匹配元素的新数组:

for (Json::ValueIterator &itr_any = data["any"].begin(); itr_any != data["any"].end(); ++itr_any)
if (0 == _stricmp((*itr_any)["any_id"].asString().c_str(), "a2"))
{
Json::Value newArray = Json::arrayValue;
for (Json::ValueIterator &itr_res = (*itr_any)["infos"].begin(); itr_res != (*itr_any)["infos"].end(); ++itr_res)
if (_stricmp((*itr_res)["path"].asString().c_str(), "D:\\"))
newArray.append((*itr_res));
(*itr_any)["infos"] = newArray;
}

关于c++ - 如何完全删除 json 数组元素(使用 jsoncpp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39991237/

78 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com