微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Boost :: Ptree的JSON数组

如何解决使用Boost :: Ptree的JSON数组

如何创建可以编码为JSON以下的boost ptree?即,我想知道如何在boost ptree中表示JSON对象的JSON数组。

[
{"3":"SomeValue"},{"40":"AnotherValue"},{"23":"SomethingElse"},{"9":"Anotherone"},{"1":"LastOne"}
]

我必须说以下链接没有回答: Creating JSON arrays in Boost using Property Trees

解决方法

链接确实回答了它。所有答案都清楚表明您应该使用push_back(实际上是insert),而不是put_child

您还必须阅读“如何制作数组”的知识,并认识到 您不能将数组作为文档根目录

这是Boost Ptree 不是 JSON库的事实的一个征兆。这是一个属性树库,并且仅支持属性树。这些限制已记录在案:

https://www.boost.org/doc/libs/1_74_0/doc/html/property_tree/parsers.html#property_tree.parsers.json_parser

enter image description here

演示

假设您确实不需要数组作为文档根目录,这是您可以做的最好的事情:

Live On Coliru

#define BOOST_BIND_GLOBAL_PLACEHOLDERS 
#include <boost/property_tree/json_parser.hpp>
#include <iostream>

using boost::property_tree::ptree;

int main() {
    ptree arr;

    for (auto [k,v]: { std::pair
            {"3","SomeValue"},{"40","AnotherValue"},{"23","SomethingElse"},{"9","AnotherOne"},{"1","LastOne"} })
    {
        ptree element;
        element.put(k,v);
        arr.push_back({"",element});
    }

    // can't have array at root of doc...
    ptree doc;
    doc.put_child("arr",arr);
    write_json(std::cout,doc);
}

打印

{
    "arr": [
        {
            "3": "SomeValue"
        },{
            "40": "AnotherValue"
        },{
            "23": "SomethingElse"
        },{
            "9": "AnotherOne"
        },{
            "1": "LastOne"
        }
    ]
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?