【发布时间】:2018-07-02 09:59:39
【问题描述】:
我试过了,但循环似乎太多了。有没有最优的方法?
输入 JSON:
{"errors":[{"key":"XYZ","code":37373,"message":"Invalid XYZ Code"}]}
解决方案中的硬代码键,不是问题。
我尝试通过以下解决方案进行打印:
if(!aJsonDocument.Parse<0>(aResponseJson.c_str()).HasParseError())
{
for(rapidjson::Value::ConstMemberIterator iter = aJsonDocument.MemberBegin(); iter != aJsonDocument.MemberEnd(); ++iter)
{
if(iter->name.IsString() && iter->value.IsArray())
{
std::string aKey = iter->name.GetString();
const rapidjson::Value& aJsonData = aJsonDocument[aKey.c_str()];
if(aJsonData.IsArray())
{
for (rapidjson::SizeType i = 0; i < aJsonData.Size(); i++)
{
for(rapidjson::Value::ConstMemberIterator iter1 = aJsonData[i].MemberBegin(); iter1 != aJsonData[i].MemberEnd(); ++iter1)
{
std::string aKey = iter1->name.GetString();
boost::trim(aKey);
std::string aValue = iter1->value.GetString();
boost::trim(aValue);
std::cout<< "Key: " << aKey << ", Value:" << aValue << endl;;
}
}
}
}
}
}
【问题讨论】:
-
没有其他方法可以这样做。你可以使用 foreach 循环而不是使用 for
-
对于未知深度,您可能需要使用递归。
-
只是想避免这么多 for 循环而已。想知道有没有什么快速的方法。
标签: c++ arrays json rapidjson jsondoc