有没有现成的标准框架可以做到这一点?目前我正在将csv字段转换为数组,然后转换为另一个数组作为JSON格式,这非常慢。我想知道是否有可用的标准框架或任何其他快速方法?
答案 0 :(得分:1)
库jscons允许您在没有CSV数据的附加数组的情况下执行此操作:
#include <iostream>
#include "jsoncons/json_deserializer.hpp"
#include "jsoncons_ext/csv/csv_reader.hpp"
using namespace std;
using namespace jsoncons;
using namespace jsoncons_ext::csv;
int main(int argc, char** argv) {
json_deserializer handler;
csv_reader reader(cin, handler);
reader.read();
json result = move(handler.root());
cout << result << endl;
return 0;
}
在Linux上,您可以像这样使用它(假设convert
是您编译的二进制文件):
$ cat data.csv | convert
在Windows上可能是:
> convert < data.csv
如果你想将它与文件名一起使用,你可以这样做:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <stdexcept>
#include "jsoncons/json_deserializer.hpp"
#include "jsoncons_ext/csv/csv_reader.hpp"
using namespace std;
using namespace jsoncons;
using namespace jsoncons_ext::csv;
int main(int argc, char** argv) {
try {
vector<string> arguments(argv + 1, argv + argc);
if (arguments.size() != 2)
throw runtime_error("usage: convert <input> <output>");
ifstream input(arguments[0]);
ofstream output(arguments[1]);
if (!input.is_open())
throw runtime_error(arguments[0] + ": open failed");
if (!output.is_open())
throw runtime_error(arguments[1] + ": open failed");
json_deserializer handler;
csv_reader reader(input, handler);
reader.read();
json result = move(handler.root());
output << result << endl;
} catch(exception& e) {
cout << e.what() << endl;
}
return 0;
}
您应该这样称呼它:
$ convert data.csv data.json
编译所有必须将文件夹jsoncons
和jsoncons_ext
放入include目录。