按插入顺序迭代Poco :: JSON :: Object

时间:2015-10-28 09:31:46

标签: json poco-libraries

使用a解析JSON结构时,可以保留插入顺序 Poco::JSON::Parser( new Poco::JSON::ParseHandler( true ) ):非默认ParseHandler参数preserveObjectOrder = true被移交给Poco::JSON::Object,以便它们保留按插入顺序排序的私钥列表。
然后可以通过Object::stringify()序列化对象,使其看起来就像源JSON字符串。
精细。

然而,通过Poco::JSON::Object并按插入顺序访问其内部的官方方法是什么? Object::getNames()begin() / end()使用键的字母顺序,而不是插入顺序 - 是否有其他方式来访问值,或者我是否需要修补Poco?

1 个答案:

答案 0 :(得分:0)

正如你已经说过的那样:

  • Poco :: JSON :: ParseHandler进入Poco :: JSON :: Parser构造函数。
  • Poco :: JSON :: Parser :: parse()创建一个Poco :: Dynamic :: Var。
  • 由此您提取一个Poco :: JSON :: Object :: Ptr。
  • Poco :: JSON:Object有方法" getNames"。从this commit开始,如果通过ParseHandler请求,它似乎保留了顺序。 (Poco::JSON:Object::getNames 1.8.1Poco::JSON:Object::getNames 1.9.0

所以现在应该按预期使用:

for(auto const & name : object->getNames()){
    auto const & value = object->get(name);  // or one of the other get-methods
    // ... do things ...
}