C++ boost::property_tree::read_json读取虚拟墙文件

27 篇文章 2 订阅

输入是一个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;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack Ju

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值