gpt4 book ai didi

c++ - 从 .txt 文件美化 C++ 中的 JSON 字符串

转载 作者:搜寻专家 更新时间:2023-10-31 00:08:41 24 4
gpt4 key购买 nike

我目前正在使用 C++,从使用 ostream 写入 .txt 文件的请求中获取 HTTP 响应。这是异步发生的,我不想更改它。

数据写入完成后,我想从文件中读取

{"data":{"request":[{"type":"City","query":"London, United Kingdom"}],"weather":[{"date":"2013-04-21","天文"......

~不知何故~使用外部库(如 nlohmann/json 或其他(?))美化字符串,然后

a) 将其打印到控制台并b) 将其保存在不同的文件中 (pretty.json)

我无法理解使用哪种方法: https://github.com/nlohmann/json

有什么想法可以解决这个问题吗?

我一直在考虑逐行获取文件,直到我将 EOF 打入一种“缓冲区”,然后在其上运行 _json 并保存可以在控制台上显示的解决方案...

到目前为止我的代码

#include <cpprest/http_client.h>
#include <cpprest/filestream.h>
#include <iostream>
#include <sstream>
#include "json.hpp"



using namespace utility; // string conversion
using namespace web; // URI
using namespace web::http; // HTTP commands
using namespace web::http::client; // HTTP Client features
using namespace concurrency::streams; // Asynch streams, like Node

using json = nlohmann::json;

int main()
{
auto fileStream = std::make_shared<ostream>();

// Open stream to output file.
pplx::task<void> requestTask = fstream::open_ostream(U("results.txt"))

.then([=](ostream outFile)

{
*fileStream = outFile;

http_client client //gets the info
return client.request(methods::GET, stringBuilder.to_string());
})

.then([=](http_response response) // set up response handler
{
printf("Received response status code:%u\n", response.status_code());

return response.body().read_to_end(fileStream->streambuf());

})

.then([=](size_t) // close file stream
{
return fileStream->close();
})

.then([=]()
{
nlohmann::json j;
std::ifstream i;
i.open("results.txt"); // ?? <<< === this is where my question is
});

// Wait for all the outstanding I/O to complete, handle exceptions
try
{
requestTask.wait();
}
catch (const std::exception &e)
{
printf("Error exception:%s\n", e.what());
}


return 0;
}

解决方案:

.then([=]()
{

// read a JSON file
std::ifstream readFromFile("results.txt");
if (readFromFile.is_open()) {

nlohmann::json j;
readFromFile >> j;

// write prettified JSON to another file
std::ofstream writeToFile("pretty.json");
writeToFile << std::setw(4) << j << std::endl;

readFromFile.close();
writeToFile.close();
}
else {
std::cout << "unable to open file";
}

});

最佳答案

你有两种选择来美化 nlohmann。

使用产生字符串的转储

int indent = 4;
nlohmann::json data;
data.dump(indent);

或者使用设置了字段宽度的流输出重载

std::ofstream o("pretty.json");
o << std::setw(4) << data << std::endl;

关于c++ - 从 .txt 文件美化 C++ 中的 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47834320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com