5007.jsoncpp库编程

jsoncpp 库的使用.

 //2.测试一下jsoncpp库是否好使.
            Json::Value root;
            Json::Value data;
            root["action"] = "run";
            data["number"] = 1;
            root["data"] = data;
            Json::FastWriter writer;
            std::string json_str = writer.write(root);
            RCLCPP_INFO(this->get_logger(), "json:'%s' --> test ", json_str.c_str());

            //3.解析json数据
            Json::Value root1;
            Json::Reader reader;
            reader.parse(json_str, root1);

            string action_ = root1["action"].asString();
            Json::Value  data1 = root1["data"];
            string number_ = data1["number"].asString();
            RCLCPP_INFO(this->get_logger(), "json_parse:'%s', '%s' --> test ", action_.c_str(), number_.c_str());

在这里插入图片描述

ros2 工程配置

在这里插入图片描述

在这里插入图片描述

jsoncpp 通过源码形式加入Qt项目

注:经jsoncpp 编译成c++库,通过Qt工程调用,出现一个指针转换的错误,个人认为是c++11标准没有添加到Qt工程中导致的。

在这里插入图片描述

上图由于我的项目中缺少c++语言标准的设置,不清楚是因为什么
故采用另外一个方案,将jsoncpp源码库集成到Qt工程中,即可使用,编译运行没有任何问题,记录一下.

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

#include "JsonTest.h"
#include <iostream>
#include <QDebug>
//#include "QJson/parser.h"
//#include "QJson/serializer.h"
//#include "QJson/qobjecthelper.h"

#include "json/json.h"



JsonTest::JsonTest(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

    generate_json_string();


}


void JsonTest::generate_json_string()
{
   /* QJsonDocument jdoc;
    QJsonObject obj;
    QJsonArray  arr;*/

    
    Json::Value root;
    Json::Value data;

    root["action"] = "run";
    data["number"] = 1;
    root["data"] = data;
    Json::FastWriter writer;
    std::string json_str = writer.write(root);

	qDebug() << "json_str:" << QString::fromStdString(json_str);

}

void JsonTest::parse_json_string()
{

}

jsoncpp 打包数组数据

Json::Value root;
	Json::Value dev;
	Json::FastWriter writer;
	Json::Value topic_msg;
	
	for (int i = 0; i < tasks.size(); i++) {
		dev["id"] = tasks[i].uav_id_;
		dev["lon"] = tasks[i].target_pos_[0] * 10000000; //1E7 deg
		dev["lat"] = tasks[i].target_pos_[1] * 10000000; //1E7 deg
		dev["alt"] = tasks[i].target_pos_[2] * 10000000; //1E7 deg

		root.append(dev);
		qDebug() << "uav_id:" << tasks[i].uav_id_ << " lon:" << tasks[i].target_pos_[0] << " lat:" << tasks[i].target_pos_[1] << " alt:" << tasks[i].target_pos_[2];
	}

	//将json对象转换为json字符串

	Json::String str = writer.write(root);

模拟发送接收数据

由于linux中ros系统与win10中的qgis系统进行通信,故需要使用rosbridge桥,进行中间消息转换。
故写了一段测试转换的代码
//1.测试json数据解析, 模拟接收线程,接收到无人机位置信息数据.
	Json::Value msg;
	Json::Reader reader;
	Json::FastWriter writer;
	Json::Value uav_pos;
	Json::Value dev; // 无人机位置信息 json
	Json::Value data; // 

	dev["id"] = 100; //无人机id
	dev["lon"] = 1001234567;
	dev["lat"] = 341234567;
	dev["alt"] = 300;

	//2.模拟无人机发送的位置信息代码,将数据进行打包.
	uav_pos["data"] = dev;  //"data" 字段对应 ros系统中 std_msgs/String 类型的消息.
	Json::String str = writer.write(uav_pos); //位置信息整体打包.

	qDebug() << "uav_pos --> " << QString::fromStdString(str);

	//3.接收到的数据.应为QString类型,需要转换为Json::String类型
	QString  q_str = QString::fromStdString(str);

	reader.parse(q_str.toStdString(), msg);
	data = msg["data"];

	qDebug() << "uav_pos --> " << "id:" << data["id"].asInt() << " lon:" << data["lon"].asInt() << " lat:" << data["lat"].asInt() << " alt:" << data["alt"].asInt();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

guangshui516

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

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

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

打赏作者

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

抵扣说明:

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

余额充值