Closed pengweichu closed 8 years ago
Json objects are intentionally immutable. If you want to build a Json object incrementally, just create a Json::object (which is a typedef for map<string,Json>), add the elements you want, then construct a Json() from the final result. You can use the same using Json::array which is std::vector
Got it, thanks for your help, I will try it.
Best regards,
I don't want to go deep debugging your code for you, but I don't see any sign that the library is behaving badly. The first difference I see is an extra array where there should, which looks like it maps to the Json::array ar in your code, so I wonder why you think you need that.
Good luck.
Andrew
On Tue, Jan 5, 2016 at 12:38 AM, pengweichu notifications@github.com wrote:
@artwyman https://github.com/artwyman I'm sorry, could you please help me to create below JSON ?
{"transports":{"1":{"protocol":"TCP","port":5060}, "2":{"protocol":"UDP","port":5062}, "3":{"protocol":"TLS","port":5068}}}
Below is my code, but the out put string is :
{"transports": {"1": [{"protocol": "udp"}, {"port": 5060}], "2": [{"protocol": "tcp"}, {"port": 5061}], "3": [{"protocol": "tls"}, {"port": 5062}]}}
std::vectorstd::string transports; transports.push_back("udp"); transports.push_back("tcp"); transports.push_back("tls");
std::vector
ports; ports.push_back(5060); ports.push_back(5061); ports.push_back(5062); std::map<string, Json> finalJson;
for (int i = 0; i < 3; ++i) { std::map<std::string, std::string> m1; m1["protocol"] = transports[i];
std::map<std::string, int> m2; m2["port"] = ports[i]; Json::array ar; ar.push_back(Json(m1)); ar.push_back(Json(m2)); if (i == 0) { finalJson["1"] = Json(ar); } else if (i == 1) { finalJson["2"] = Json(ar); } else if (i == 2) { finalJson["3"] = Json(ar); }
}
Json::object ob; ob["transports"] = Json(finalJson); Json testJson = ob;
std::string ttt = testJson.dump(); printf("%s\n", ttt.c_str());
— Reply to this email directly or view it on GitHub https://github.com/dropbox/json11/issues/49#issuecomment-168934936.
@artwyman Thanks, I have been got it solved. Sorry for bother.
Best regards,
Hello, I'm new to json11, in previous I using the rapidjson, I want to create below JSONs with json11, must I build the whole JSON string first in order to assign to json11::Json? It's possible have some other ways to do that ?
1: {"transports":{"1":{"protocol":"TCP","port":5060}, "2":{"protocol":"UDP","port":5062}, "3":{"protocol":"TLS","port":5068}},
2: {" request ":" clear", "ids":[1, 2, 3]}
3: {"response":" GetAllocations ", "ports":[1, 9098, 9099, 2, 9100, 9101, 3, 9102, 9103], "code": 200"}
With rapidjson, I can do it likes below, does json11 supports similar way ?