如何使用C ++将csv文件转换为json

时间:2014-08-09 09:58:27

标签: c++ json csv

有没有现成的标准框架可以做到这一点?目前我正在将csv字段转换为数组,然后转换为另一个数组作为JSON格式,这非常慢。我想知道是否有可用的标准框架或任何其他快速方法?

1 个答案:

答案 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

编译所有必须将文件夹jsonconsjsoncons_ext放入include目录。