【问题标题】:iterate through Poco::JSON::Object in insertion order按插入顺序遍历 Poco::JSON::Object
【发布时间】:2015-10-28 09:31:45
【问题描述】:

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

然而,单步执行Poco::JSON::Object 并按插入顺序访问其内部的官方方法是什么? Object::getNames()begin()/end() 使用键的字母顺序,而不是插入顺序——还有其他方法可以访问这些值,还是我必须修补 Poco?

【问题讨论】:

    标签: json poco-libraries


    【解决方案1】:

    正如你已经说过的:

    • Poco::JSON::ParseHandler 进入 Poco::JSON::Parser-constructor。
    • Poco::JSON::Parser::parse() 创建一个 Poco::Dynamic::Var。
    • 从中您将提取一个 Poco::JSON::Object::Ptr。
    • Poco::JSON:Object 具有“getNames”方法。从this commit 开始,如果它是通过 ParseHandler 请求的,它似乎会保留顺序。 (Poco::JSON:Object::getNames 1.8.1, Poco::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 ...
    }
    

    【讨论】:

    • 你确定吗?从链接中不清楚是这种情况,代码已经添加到这个区域,但你确定它是做什么的吗?
    猜你喜欢
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2013-07-01
    • 1970-01-01
    相关资源
    最近更新 更多