如何在json文件中写入点矢量矢量?

时间:2014-07-08 10:41:39

标签: json jsoncpp

我是读/写JSON文件的初学者。 如何将std::vector<std::vector<Point>>(C ++数据类型)写入JSON文件,以便在读取创建的JSON后,我可以单独访问每个std::vector<point>? 请帮忙。

3 个答案:

答案 0 :(得分:2)

假设有POD数据结构,您可以使用以下命令对其进行序列化:

struct Point
{
    double x, y;
};

Point p;
p.x = 123;
p.y = 456;

std::vector<Point> arr;
arr.push_back(p);

std::vector<std::vector<Point>> container;
container.push_back(arr);
container.push_back(arr);

Json::Value root(Json::arrayValue);
for (size_t i = 0; i != container.size(); i++)
{
    Json::Value temp(Json::arrayValue);

    for (size_t j = 0; j != container[i].size(); j++)
    {
        Json::Value obj(Json::objectValue); 
        obj["x"] = container[i][j].x;
        obj["y"] = container[i][j].y;
        temp.append(obj);
    }

    root.append(temp);
}

生成的JSON是:

[
   [
      {
         "x" : 123.0,
         "y" : 456.0
      }
   ],
   [
      {
         "x" : 123.0,
         "y" : 456.0
      }
   ]
]

您可以作为数组数组访问,就像在C ++中一样。

答案 1 :(得分:0)

你的JSON应该是这样的:

{
  "vectorVectors" : [
    { 
      "pointVectors" : [
        { "point": "<some representation of a point>" },
        // ...
      ]
    },
    // ... 
  ]
}

这样vectorVectorsVectors Vector<Point>的{​​{1}}列表,pointVectorsVector的个别元素(包含多个Vector<Point> } s),pointPoint的实际代表。

至于如何生成此布局,看起来您可以使用rapidjson,但我不确定 - 我从未使用过它。

答案 2 :(得分:0)

@Sga的答案是正确的,但它缺少对文件的写操作,因此我将用写行的行来报告他的代码(我更改了一些名称)。

在我的情况下,

polys是openCV Point对象的向量的向量,但它什么都不会改变。

Json::Value polygons(Json::arrayValue);
std::ofstream file_id;
file_id.open(dataFileName);
Json::StyledWriter styledWriter;

for (size_t i = 0; i != polys.size(); i++)
{
    Json::Value singlePoly(Json::arrayValue);

    for (size_t j = 0; j != polys.at(i).size(); j++)
    {
        Json::Value pointSingle(Json::objectValue);
        pointSingle["x"] = polys.at(i).at(j).x;
        pointSingle["y"] = polys.at(i).at(j).y;
        singlePoly.append(pointSingle);
    }

    polygons.append(singlePoly);
}
file_id << styledWriter.write(polygons);

file_id.close();