首页 > 其他分享 >QJson

QJson

时间:2024-02-24 16:55:05浏览次数:26  
标签:insert obj value json 键值 led QJson

Qjson

Json数组的数据格式:Json数组

json数组支持:整型、浮点、字符串、布尔类型、json数组、json对象、空值:null
类型一致
[1,2,3,4,5]//整型
["aaa","bbb","ccc"]//字符串
类型不一致
[12,12.34,true,"aaaaa",null]
数组嵌套使用
[
[1,2,3],
["aa",1,null],
["aaa","ccc","dddd"],
]
json对象:对象使用{}来描述,每个Json对象可以存储若干个元素,每个元素对应一个键值对(key:value),元素与元素之间逗号间隔
1.键值(key)必须是字符串。
2.value值与json数组支持格式相同,json数组换成json对象
例子:
{
	"name":"zhangsan",
	"sex":"man",
	"famiy":
	{
        "age":11;
		"father":"lisi",
		"mother":"wangwu",
	}
}
如上可见,一个元素对应一个键值,元素可以为一个json对象。并且键值不允许重复

json的类

1.QJsonValue

其构造函数是一个重载函数:可以将各种数据类型的转换为Json类型。

2.QjsonObject

通过insert方法,x.insert(Qstring &key,QJsonValue &value)向对象中插入键值队和元素
通过key值得到对应数据 value(key);//暂定

json:一种数据格式,什么语言都可以使用

	QString led_statu;
    if(ui->pb_led->text()=="led_on")
    {
        led_statu = "@led_on#.";
    }
    else
    {
        led_statu = "@led_off#.";
    }
	QJsonValue led_Statu=QJsonValue(led_statu);
    QJsonObject led;
/**************************************************/
上面代码处理,由于要下发led的状态,但是led的状态是一个变量,如果直接下发字符串,那么只能发送一种指令,这里使用一个字符串将经过判断后的指令存起来。然后再将它转换为qjson类型装入即可。
/**************************************************/
    led.insert("num",11);
    led.insert("LEDSwitch",1);
    led.insert("esp",led_Statu);
    QJsonValue a;
    a = QJsonValue(led);
    obj.insert("id",1703080197486);
    obj.insert("params",a);
    obj.insert("version","1.0");
    obj.insert("method","thing.event.property.post");
    QJsonDocument ment(obj);
    str = ment.toJson();

上面代码执行后的结果如下

"{\n
   \"id\": 1703080197486,\n
    \"method\": \"thing.event.property.post\",\n
    \"params\": 
	{\n     \"LEDSwitch\": 1,\n
        \"esp\": \"@led_off#.\",\n
        \"num\": 11\n    
    },\n
        \"version\": \"1.0\"\n
}\n"

封装 添加 key value 到Jsonobject ----> Qjsonducument - --> string ;

解析 string -----> Qjsonducument ----> object ------- >key value;

多种数据类型整和成 Qstring

封装

void Widget::on_pushButton_clicked()
{
    //cli->publish(QString("qq"),"{}");
    QJsonObject obj;
    obj.insert("id",0);
    obj.insert("lamp",true);
    QJsonDocument ment(obj);
    QByteArray str = ment.toJson();
    qDebug() << str;
    cli->publish(QString("1694097863323/APP2AIOTSIM"),str);
}

解析

void Widget:: do_recv(QByteArray msg,QMqttTopicName topic)
{

       // msg  //对msg解析
    qDebug() << msg;

        QJsonDocument ment = QJsonDocument:: fromJson(msg);   //msg 字符数组 ---->  qjsondocument

        QJsonObject obj =  ment.object();  //   json文档 ---> json对象

        double hum  = obj.value("hum").toDouble();
        //qjsonvalue --> double    通过key : hum  得到value
        double tem  =  obj.value("tem").toDouble();

        ui->line_hem->setText(QString::number(hum)); // double -- >Qstring
        ui->line_tem->setText(QString::number(tem)); // double -- >Qstring
}

QT的多层JSON格式解析

		{"deviceType":"CustomCategory",
         "iotId":"TRwDtZRYJHWBQrcfCChOk01an0",
         "requestId":"null",
         "checkFailedData":{},
         "productKey":"k01an9vsyUV",
         "gmtCreate":1708763713531,
         "deviceName":"ESP8266_LED",
         "items":
         {"LED":
          {"time":1708763713520,
           "value":"1"
          }
         }
        }

		QJsonDocument ment = QJsonDocument::fromJson(message);//得到的信息转换为JSON文件
        QJsonObject obj = ment.object();//将json文件格式转换为object格式
        QJsonValue value = obj.value("items");//找到obj对象的items键值对的内容,复制给value

        QJsonObject obj1 = value.toObject();//将items中的内容赋值给obj1
        QJsonValue value1 = obj1.value("LED");//寻找obj1键值对LED内容并且赋值给value1

        QJsonObject obj2 = value1.toObject();//将LED键值对内容转换为object格式并赋值
        QString value2 = obj2.value("value").toString();//找到value中的值转为string格式。
        ui->lineEdit->setText(value2);

注意:最后一个元素后面不要加逗号,键值必须唯一,对于json数组和json对象不能并列,并且父子级别的json对象和json数组混用。

标签:insert,obj,value,json,键值,led,QJson
From: https://www.cnblogs.com/luotianwen/p/18031255

相关文章

  • C++ Qt开发:运用QJSON模块解析数据
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QJson组件的实现对JSON文本的灵活解析功能。JSON(JavaScriptObjectNotation)是一种轻量级......
  • Qt报错: variable has incomplete typte ‘QJsonObject’
    Qt常见运行失败的记录1.变量声明未实例化变量在头文件声明了,没new出来直接使用,导致程序运行崩溃2.定义变量时候下面出行红线,出现variblehasincompletetype‘QTextStream’variblehasincompletetype'QTextStream未添加QTextStream头文件3.Qt信号与槽连接失败的几......
  • QJsonObject
    QJsonObject #include<QJsonObject> PublicTypesclassconst_iteratorclassiteratortypedefConstIteratortypedefIteratortypedefkey_typetypedefmapped_typetypedefsize_typePublicFunctions QJsonObject() QJsonO......
  • Qt QJsonDocument以及与QJsonArray、QJsonObject、QJsonValue的关联
    0、说明QJsonDocument类提供了read/writeJSON文档的方法。用QJsonDocument::fromJson()方法,可以从将一个JSON文件(或者QByteArray数据)转换为QJsonDocument,用QJsonDocument::toJson()则能起到相反的用法。在此过程中的语法解析是很高效的,并且可以将JSON转换为Qt使用的二......
  • QT5 QJson与QString相互转换
    QT5QJson与QString相互转换QString转QJsonQJsonObjectMainWindow::QstringToJson(QStringjsonString){QJsonDocumentjsonDocument=QJsonDocument::fromJson(jsonString.toLocal8Bit().data());if(jsonDocument.isNull()){qDebug()<<"StringNULL&......
  • 【QtJson】用Qt自带的QJson,直接一步到位封装和解析一个类的实例对象!
    之前貌似没有看过类似的代码我们现在的要求就是直接在不知道类成员的情况下,把一个类丢进去就能生成一个Json字符串,也可以把一个字符串和一个类成员丢进去就能根据成员变量......
  • Qt平台下使用QJson 使用
    前言在Qt开发环境下使用Json的解析和输出当然要使用QJson来完成。QJson解析JSON主要使用的类如下#include<QJsonDocument>#include<QJsonObject>#include<QJsonArray>......
  • QJsonObject与(QByteArray、QString)互相转换
    QJsonObjectCbActionSyncManager::getJsonObjectFromByteArray(constQByteArrayjsonString){QJsonDocumentjsonDocument=QJsonDocument::fromJson(jsonString);......
  • Qt使用QJson进行Http请求时序列反序列对象
    1.创建工程使用CMake创建工程cmake_minimum_required(VERSION3.20FATAL_ERROR)project(httprequestLANGUAGESCXX)set(CMAKE_AUTOUICON)set(CMAKE_AUTOMOCO......
  • QDAC使用记录-QJson
    一:数组创建varFJson:=TQJson.Create;try withFJson.AddArray('Arr')do begin  fori:=0to1do  begin   withadddo   begin  ......