输入是一个json文件如下
VirtualWall.json
{"LAYERSUM":1,
"LAYER":[
{
"LAYERNUM":0,
"LINESUM":23,
"LINE":[
{
"BEGIN":{"X":-3028.6428,"Y":-10671.736},
"END":{"X":-3167.0588,"Y":23688.873},
"LINENUM":1,"CONFIG":1
},
{
"BEGIN":{"X":-3028.2437,"Y":-10476.9},
"END":{"X":29358.871,"Y":-10387.55},"LINENUM":2,"CONFIG":1
},
{
"BEGIN":{"X":-555.5391,"Y":3323.65},
"END":{"X":-800.3256,"Y":26135.783},"LINENUM":3,"CONFIG":1
},
{
"BEGIN":{"X":-601.88916,"Y":-8386.228},
"END":{"X":26273.258,"Y":-8285.991},"LINENUM":4,"CONFIG":1
},
{
"BEGIN":{"X":26273.258,"Y":-8285.991},
"END":{"X":26051.678,"Y":26338.797},"LINENUM":5,"CONFIG":1},
{
"BEGIN":{"X":28225.521,"Y":-10206.251},
"END":{"X":27903.93,"Y":26526.918},"LINENUM":6,"CONFIG":1
}
]
}
]
}
json中含有一系列的线段起点和终点,我们的目标时是其提取出来。
代码如下
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <iostream>
int main() {
try {
// 创建一个 property tree 对象
boost::property_tree::ptree pt;
boost::property_tree::read_json("/home/juchunyu/20231013/240606/json_read/VirtualWall.json", pt);
// 从 property tree 中获取数据
int layerSum = pt.get<int>("LAYERSUM");
std::cout << "LAYERSUM: " << layerSum << std::endl;
// 获取名为 "LAYER" 的数组
const boost::property_tree::ptree& layerArray = pt.get_child("LAYER");
int i = 0;
// 遍历每个图层
for (const auto& layer : layerArray) {
// 获取每个图层的 "LINE" 数组
const boost::property_tree::ptree& lineArray = layer.second.get_child("LINE");
// 遍历每条线
for (const auto& line : lineArray) {
// 获取 BEGIN 和 END 的 X、Y 坐标
double beginX = line.second.get<double>("BEGIN.X");
double beginY = line.second.get<double>("BEGIN.Y");
double endX = line.second.get<double>("END.X");
double endY = line.second.get<double>("END.Y");
// 输出 BEGIN 和 END 的坐标信息
std::cout << "=====" << i << "==========" << std::endl;
std::cout << "BEGIN: X=" << beginX << ", Y=" << beginY << std::endl;
std::cout << "END: X=" << endX << ", Y=" << endY << std::endl;
i++;
}
}
} catch (boost::property_tree::ptree_error& e) {
std::cerr << "Error reading JSON: " << e.what() << std::endl;
}
return 0;
}