如何使用C++ jsoncons库将处理后的JSON转换为CSV文件?
使用jsoncons将处理后的JSON转回CSV
我的完整任务:
- 读取CSV文件
- 将其解析为JSON文件
- 执行一些操作
- 将处理后的JSON重新转换为CSV
我使用jsoncons库,因为它同时支持JSON和CSV处理。目前已经实现了CSV转JSON及相关数据操作,但不知道怎么把处理后的JSON写回CSV。我是jsoncons新手,下面是我解析CSV为JSON的代码片段:
#include <iomanip> #include <iostream> #include <fstream> #include <jsoncons/json.hpp> #include <jsoncons_ext/csv/csv.hpp> using namespace std; using namespace jsoncons; using namespace jsoncons::csv; int main() { fstream file; file.open("C:\\Users\\Downloads\\Csv1\\smallExportCSV.csv"); csv::csv_options options; options.assume_header(true); // Parse the CSV data into an ojson value ojson j = csv::decode_csv<ojson>(file, options); // Pretty print json_options print_options; print_options.float_format(float_chars_format::fixed); std::cout << "\n" << pretty_print(j, print_options) << "\n\n"; }
解决方案
jsoncons提供了csv::encode_csv函数来完成JSON到CSV的转换,核心是确保你的JSON结构是包含多个对象的数组,每个对象的键对应CSV的列名(和解析CSV时的表头一致)。
以下是完整的示例代码,包含读取CSV、处理数据、写回CSV的完整流程:
#include <iomanip> #include <iostream> #include <fstream> #include <jsoncons/json.hpp> #include <jsoncons_ext/csv/csv.hpp> using namespace std; using namespace jsoncons; using namespace jsoncons::csv; int main() { // 1. 读取并解析CSV为JSON fstream input_file; input_file.open("C:\\Users\\Downloads\\Csv1\\smallExportCSV.csv"); csv::csv_options parse_options; parse_options.assume_header(true); ojson j = csv::decode_csv<ojson>(input_file, parse_options); input_file.close(); // 2. 执行你的数据处理操作(示例:修改第一个元素的某个字段) if (!j.empty() && j.is_array()) { j[0]["some_column"] = "updated_value"; } // 3. 将处理后的JSON写回CSV fstream output_file; output_file.open("C:\\Users\\Downloads\\Csv1\\processed_output.csv", ios::out); csv::csv_options write_options; write_options.write_header(true); // 写入表头 csv::encode_csv(j, output_file, write_options); output_file.close(); cout << "CSV文件已成功生成\n"; return 0; }
关键说明
encode_csv接受JSON数组作为输入,每个数组元素对应CSV的一行write_options.write_header(true)会根据JSON对象的键自动生成CSV表头,和解析时的表头保持一致- 如果你的JSON结构有调整,比如新增/删除字段,生成的CSV也会对应调整列
内容的提问来源于stack exchange,提问作者Akash Rajawat
相关产品推荐
相关产品推荐

