将一个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)

  

posted @ 2022-08-07 15:50  九叶草  阅读(426)  评论(0编辑  收藏  举报