用Poco迭代json结构

时间:2017-12-13 14:28:02

标签: c++ json dynamic poco-libraries

我正在使用Poco库获取C ++代码

这是我必须解析的json树的一个例​​子

{
    "name" : "actionToDo",
    "description" : "",
    "version" : "1",
    "parameters" : {
        "inputDirectory" : "string",
        "workingDir" : "string",
        "tempDir" : "string",
        "size" : "integer"
    }
}

将数据量转换为"参数"场地可以改变。 我必须将所有项目放入地图

今天是我的代码

std:: map<std::string, std::string> output;

Poco::JSON::Parser sparser;
Poco::Dynamic::Var result = sparser.parse(jsonStr);
Poco::JSON::Object::Ptr object = result.extract<Poco::JSON::Object::Ptr>();
Poco::DynamicStruct ds = *object;

Poco::Dynamic::Var collection(ds["parameters"]);

if (collection.isStruct())
{
     LOG("STRUCT"); //it's logged !!
}

for (Poco::Dynamic::VarIterator it = collection.begin(); it != collection.end(); ++it)
{
    LOG_F("item : %s", it->toString()); //never logged
    //here I would like to have something like
    //output[it->first()] = it->second();

}

我得到的输出

  

14:13:00&#39; 900 :: [注意]:STRUCT

     

14:13:00&#39; 900 :: [严重]:异常:异常:无法加载从文件运行:   /opt/.../file.json例外:   无法解析字段&#39;参数&#39;或其子女

     

无效访问:不是结构。

&#34;无法解析字段&#39;参数&#39;或其子女&#34;由下面的catch生成但是&#34; Invalid access:Not a struct。&#34;来自Poco

1 个答案:

答案 0 :(得分:1)

用于集合变量 DynamicStruct 而不是 Var

Poco::DynamicStruct collection = ds["parameters"].extract<Poco::DynamicStruct>();

for (auto it = collection.begin(); it != collection.end(); ++it)
{
    LOG_F("item : %s", it->second.toString().c_str());
}