将一个Eigen::Matrix中的数据(数组格式),按行写入到json文件当中.
1.这里主要实现如何以数组的形式写入到json文件当中,因为c++的Jsoncpp库中的.append只支持一个字符的写入(还是python的json友好)。去网上找了老久的解决办法,发现中文解答全是复制粘贴,真垃圾。最终还是自己花费了半天时间摸索怎么加(我好难,想哭)。话不多说,直接贴代码。
void writeFileJson(Eigen::Matrix<double, 2, 2> &point) { std::cout<<point<<std::endl; //根节点 Json::Value root; // 创建一个一级节点 Json::Value second; // 创建一个二级节点 for(int i=0;i<point.rows(); i++){ double a[2] = {point.row(i)[0], point.row(i)[1]}; Json::Value third; // 因为我们要实现数组的追加,所以我们需要在这一层创建一个三级节点 for(auto i : a) { third.append(i); // 因为对于C++ Json来说,只支持单个字符的追加,所以我们这里需要这句代码; } second["two title"].append(third); // 追加完之后,将追加的数组放在上一个数组之后。 } //根节点属性 root["first title"].append(second); // 将我们的二级节点与一节节点关联起来 Json::StyledWriter sw; // 创建一个带有格式的写入 Json::FastWriter fw; std::ofstream desFile("/Users/wpx/arap2/data/demo.json", std::ios::out | std::ios::app); // 不删除之前内容的添加 if (!desFile.is_open()) // 判断是否可以打开json文件; { std::cout << "Fail to pen des.jons"; } desFile << fw.write(root); // 不带有格式的写入到json文件中。(就是在一行上写入所有内容) // desFile << sw.write(root); // 有格式的写入到json文件中。(多行显示) desFile.close(); // 记得关闭打开的json文件 }
fw输出格式:
{"first title":[{"two title":[[1.0,2.0],[3.0,4.0]]}]}
sw输出格式:
{ "first title" : [ { "two title" : [ [ 1.0, 2.0 ], [ 3.0, 4.0 ] ] } ] }
2.既然说了python很好,我这里也贴一下python版的;
def create_json(points, file_name): #points 就是我们的数据,我这里是numpy数组格式。 # file_name 你要保存的json文件路径 point = [] jsons = points for j in range(len(jsons)): data = jsons[j] data.append(0.936177) point.append(data) diract = {'first title': [{'second title': point}]} with open(file_name, 'w') as outfile: json.dump(str(diract), outfile)