gpt4 book ai didi

c++ - Poco 迭代嵌套的 JSON 对象

转载 作者:行者123 更新时间:2023-11-28 05:05:00 24 4
gpt4 key购买 nike

我有一个带有嵌套对象的 JSON(这里是一个虚构的例子,因为真正的 json 更大更复杂)。我需要遍历 siblings 对象。我知道如何用数组来做,但找不到任何例子来处理这种嵌套对象(任何嵌套深度)。

任何想法都会受到赞赏。

{
.......
"siblings":{
"Michael":{
"age":20,
"lives":"Dodoma"
},
"Polyasi":{
"age":25,
"lives":"Geita"
},
"Kiah":{
"age":3,
"lives":"Dar es Salaam"
}
}
...........
}

最佳答案

所以我发现 ValueMap::Iterator 不关心它是对象还是原子值,它对它们一视同仁。所以这是我创造的一个例子来实际测试它。感谢@atomic_alarm 插入我测试我已经放弃的潜在解决方案。

packagist.json 实际上是重命名的JSON 文件发现here .这是代码。确保链接到基础库和 json 库。

#include <Poco/JSON/Parser.h>
#include <Poco/Dynamic/Var.h>
#include <string>
#include <fstream>
#include <streambuf>
#include <iostream>

void print_version_names(Poco::JSON::Object::Ptr root);

int main(int argc, char** argv)
{
//read file
std::ifstream t("packagist.json");
std::string json_str((std::istreambuf_iterator<char>(t)),
std::istreambuf_iterator<char>());

Poco::JSON::Parser parser;
Poco::Dynamic::Var result = parser.parse(json_str);
Poco::JSON::Object::Ptr json = result.extract<Poco::JSON::Object::Ptr>();

print_version_names(json);

return 0;
}

void print_version_names(Poco::JSON::Object::Ptr root)
{
std::string root_key = "package";
std::string key = "versions";
//no checks whether such key acually exists
Poco::JSON::Object::Ptr package_json = root->getObject(root_key);
//get the nested objects
Poco::JSON::Object::Ptr nested_versions = package_json->getObject(key);

//iterate the map
Poco::JSON::Object::Iterator it;
for(it = nested_versions->begin(); it != nested_versions->end(); it++)
{
//no check of whether it is an object
std::cout<<it->first<<"\n";
}
}

结果:

2.0.0
2.0.0-alpha
2.0.0-beta
2.0.0-rc
2.0.1
2.0.10
2.0.11
2.0.11.1
2.0.11.2
2.0.12
2.0.2
2.0.3
2.0.4
2.0.5
2.0.6
2.0.7
2.0.8
2.0.9

关于c++ - Poco 迭代嵌套的 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45044184/

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