c++属性ツリーを使用してBoostにJSON配列を作成する

2202 ワード

boostプロパティツリーを使用してJSON配列を作成しようとしました.
 
documentation氏は「JSON配列はノードにマッピングされ,各要素は空の名前のサブノードである.
したがって、空の名前のプロパティ・ツリーを作成し、write_json(...)を呼び出して配列を取得したいのですが、ドキュメントには名前のないサブノードの作成方法が示されていません.ptree.add_child(「」、値)を試したことがありますが、これは次のように生成されます.
 
Assertion `!p.empty() && "Empty path not allowed for put_child."' failed

ドキュメントはこの点を解決していないようで、少なくともいかなる方法で、私は明らかにすることができます.誰が助けることができますか?
単純配列:
 
 
#include 
using boost::property_tree::ptree;

ptree pt;
ptree children;
ptree child1, child2, child3;

child1.put("", 1);
child2.put("", 2);
child3.put("", 3);

children.push_back(std::make_pair("", child1));
children.push_back(std::make_pair("", child2));
children.push_back(std::make_pair("", child3));

pt.add_child("MyArray", children);

write_json("test1.json", pt);

結果は次のとおりです.
 
{
    "MyArray":
    [
        "1",
        "2",
        "3"
    ]
}

オブジェクトの配列:
 
ptree pt;
ptree children;
ptree child1, child2, child3;


child1.put("childkeyA", 1);
child1.put("childkeyB", 2);

child2.put("childkeyA", 3);
child2.put("childkeyB", 4);

child3.put("childkeyA", 5);
child3.put("childkeyB", 6);

children.push_back(std::make_pair("", child1));
children.push_back(std::make_pair("", child2));
children.push_back(std::make_pair("", child3));

pt.put("testkey", "testvalue");
pt.add_child("MyArray", children);

write_json("test2.json", pt);

結果は次のとおりです.
 
{
    "testkey": "testvalue",
    "MyArray":
    [
        {
            "childkeyA": "1",
            "childkeyB": "2"
        },
        {
            "childkeyA": "3",
            "childkeyB": "4"
        },
        {
            "childkeyA": "5",
            "childkeyB": "6"
        }
    ]
}

これが役に立つことを願っています.