qt json格式组装和拆解
头文件
#include <QJsonDocument>
#include <QJsonParseError>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonValue>
qt json格式组装
QJsonObject simp_ayjson;
simp_ayjson.insert("name", "LLH");
simp_ayjson.insert("age", 20);
simp_ayjson.insert("myAccounts", QString::fromLocal8Bit("123你好"));
QJsonDocument document;
document.setObject(simp_ayjson);
QByteArray simpbyte_array = document.toJson(QJsonDocument::Compact);
QString simpjson_str(simpbyte_array);
qt json格式拆分
网上的比较麻烦,但是比较安全
如下
//简单的QT解析JSON
QJsonParseError simp_json_error;
QString name, myAccount;
int age;
//QTJSON所有的元素
QJsonDocument simp_parse_doucment = QJsonDocument::fromJson(msg.toUtf8(), &simp_json_error);
//检查json是否有错误
if (simp_json_error.error == QJsonParseError::NoError)
{
if (simp_parse_doucment.isObject())
{
//开始解析json对象
QJsonObject obj = simp_parse_doucment.object();
//如果包含name
if (obj.contains("name"))
{
//的到name
QJsonValue name_value = obj.take("name");
if (name_value.isString())
{
//转换name
name = name_value.toVariant().toString();
}
}
if (obj.contains("myAccounts"))
{
QJsonValue myAccount_value = obj.take("myAccounts");
if (myAccount_value.isDouble())
{
myAccount = myAccount_value.toVariant().toString();
}
}
if (obj.contains("age"))
{
QJsonValue age_value = obj.take("age");
if (age_value.isDouble())
{
age = age_value.toVariant().toInt();
}
}
}
}
qDebug() << QString::fromLocal8Bit("简单的QT解析出来的数据:") << name << "," << age << "," << myAccount;
我自己简化了一些步骤如下(我这里数据格式众多,不可能一一校验,既然我这里使用这个说明肯定有这些字段,就减少了一些校验)
//简单的QT解析JSON
QJsonParseError simp_json_error;
//QTJSON所有的元素
QJsonDocument simp_parse_doucment = QJsonDocument::fromJson(msg.toUtf8(), &simp_json_error);
//检查json是否有错误
if (simp_json_error.error == QJsonParseError::NoError)
{
QJsonObject obj = simp_parse_doucment.object();
//obj.contains("control")?strcpy(pt.control,obj.take("control").toVariant().toString().toLatin1().data()):"";
strcpy(pt.ip1,obj.take("ip1").toVariant().toString().toLatin1().data());
strcpy(pt.ip2,obj.take("ip2").toVariant().toString().toLatin1().data());
pt.port1 = obj.take("port1").toVariant().toString().toInt();
}
do_send(pt,cmdflag);