I'm trying to append JSON objects to a file at specific position but I'm unable to do it as required. I get result but without "," separating the values, so they are separate JSON objects.
I want to loop through JSON objects and append the result to a file and separate it with "," and it is a valid JSON. Here is what I tried
auto js_text = R"(
{
"a": "all_items",
"b": []
}
)";
std::ofstream js_file("test.json");
js_file << std::setw(4) << js_text << std::endl;
std::ifstream in("test4.json");
json js_file = json::parse(in);
std::ifstream load_url("url_file.json");
json url_file = json::parse(load_url);
for (auto& endpoint : url_file["url_list"])
{
std::string url = endpoint["url"].get<std::string>();
auto r = cpr::Get(cpr::Url{ url });
json j = json::parse(r.text); // r gets a nested json objects from parsed url
for (auto& td : j["b"])
{
json value = j["b"][0];
json data = js_file;
data["b"][0] = value;
std::ofstream output;
output.open("test.json",std::ios_base::app );
output << std::setw(4) << data << std::endl;
}
Result I want is
{
"a": "all_items",
"b": [
{
"c": "xxx",
"d": "yyy"
},
{
"e": "zzz"
}
]
}
Updated Code: after Botje valuable input.
auto js_text = R"(
{
"a": "abc",
"b": [ ]
}
)";
json js_file = json::parse(js_text);
std::ifstream load_url("url_file.json");
json url_file = json::parse(load_url);
for (auto& endpoint : url_file["url_list"])
{
std::string url = endpoint["url"].get<std::string>();
auto r = cpr::Get(cpr::Url{ url });
json j = json::parse(r.text); // j contains results from multiple HTTP requests that has json objects.
for (auto& elem : j["b"])
{
json jd = j["b"];
js_file["b"].emplace_back(std::move(td));
std::cout << "jd:" << jd.dump(4) << std::endl;
}
}
std::ofstream output;
output.open("test.json",std::ios_base::app );
output << std::setw(4) << js_file << std::endl;
}
Hope this help others.