我正在尝试将 JSON 对象附加到特定位置的文件中,但我无法按要求执行此操作。我得到了结果,但没有“,”分隔值,因此它们是单独的 JSON 对象。
我想遍历 JSON 对象并将结果附加到文件中并用“,”分隔它,它是一个有效的 JSON。这是我尝试过的
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;
}
我想要的结果是
{
"a": "all_items",
"b": [
{
"c": "xxx",
"d": "yyy"
},
{
"e": "zzz"
}
]
}
更新代码:在 Botje 有价值的输入之后。
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;
}
希望这对其他人有帮助。