Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating JSON arrays in Boost using Property Trees

I'm trying to create a JSON array using boost property trees.

The documentation says: "JSON arrays are mapped to nodes. Each element is a child node with an empty name."

So I'd like to create a property tree with empty names, then call write_json(...) to get the array out. However, the documentation doesn't tell me how to create unnamed child nodes. I tried ptree.add_child("", value), but this yields:

Assertion `!p.empty() && "Empty path not allowed for put_child."' failed 

The documentation doesn't seem to address this point, at least not in any way I can figure out. Can anyone help?

like image 507
Chris Stucchio Avatar asked Jan 22 '10 01:01

Chris Stucchio


1 Answers

Simple Array:

#include <boost/property_tree/ptree.hpp> 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); 

results in:

{     "MyArray":     [         "1",         "2",         "3"     ] } 

Array over Objects:

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); 

results in:

{     "testkey": "testvalue",     "MyArray":     [         {             "childkeyA": "1",             "childkeyB": "2"         },         {             "childkeyA": "3",             "childkeyB": "4"         },         {             "childkeyA": "5",             "childkeyB": "6"         }     ] } 

hope this helps

like image 157
JustAnotherLinuxNewbie Avatar answered Sep 21 '22 21:09

JustAnotherLinuxNewbie