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