首页 > 其他分享 >Qt对Json的生成与解析Demo

Qt对Json的生成与解析Demo

时间:2022-10-31 21:04:33浏览次数:61  
标签:Qt Demo object json value label Json ui QString


QJsonObject类用于封装JSON对象。JSON对象是键值对,其中键是唯一的字符串,其值由QJsonValue代表。一个QJsonObject可以从QVariantMap转换/被转换。QJsonArray类用于封装JSON数组。一个JSON数组列表值。该列表可以通过从阵列插入和移除QJsonValue的操纵。一个QJsonArray可以从QVariantList转换/被转换。


先看下效果:

Qt对Json的生成与解析Demo_封装


(引用#include <QJsonArray>、#include <QJsonDocument>这两个头文件)

1、创建json

QJsonArray json;
json.insert(0, QString("Qt"));
json.insert(1, QString("version"));
json.insert(2, QString("shazhenyu"));
json.insert(3, true);

QJsonDocument document;
document.setArray(json);
QByteArray byte_array = document.toJson(QJsonDocument::Compact);
QString json_str(byte_array);
ui->label->setText("Create json: \n\n" + json_str + "\n\n\n\n");

同样道理,不用Array用Object也可以: 

QJsonObject json;
json.insert("Name", "Qt");
json.insert("Year", 2018);
json.insert("Platform", true);
QJsonDocument document; document.setObject(json);
QByteArray byteArray = document.toJson(QJsonDocument::Compact);
QString strJson(byteArray);


2、解析json

   

QJsonParseError json_error;
QJsonDocument parse_doucment = QJsonDocument::fromJson(byte_array, &json_error);
ui->label->setText(ui->label->text() + "Resolve json: \n\n");
if(json_error.error == QJsonParseError::NoError)
{
if(parse_doucment.isArray())
{
QJsonArray array = parse_doucment.array();
int size = array.size();
for(int i = 0; i < size; i++)
{
ui->label->setText(ui->label->text() + "QJsonArray is " + QString::number(i) + ":");
QJsonValue value = array.at(i);
if(value.isString())
{
QString string = value.toString();
ui->label->setText(ui->label->text() + string + "\n");
}
else if(value.isBool())
{
bool flag = value.toBool();
ui->label->setText(ui->label->text() + (flag ? "true" : "false") + "\n");
}
}
}
}

同样的道理,不是Array是Object:

 

QJsonParseError jsonError;
QJsonDocument doucment = QJsonDocument::fromJson(byteArray, &jsonError); // 转化为 JSON 文档
if (!doucment.isNull() && (jsonError.error == QJsonParseError::NoError)) { // 解析未发生错误
if (doucment.isObject()) { // JSON 文档为对象
QJsonObject object = doucment.object(); // 转化为对象
if (object.contains("Name")) { // 包含指定的 key
QJsonValue value = object.value("Name"); // 获取指定 key 对应的 value
if (value.isString()) { // 判断 value 是否为字符串
QString strName = value.toString(); // 将 value 转化为字符串
qDebug() << "Name : " << strName;
}
}
if (object.contains("Year")) {
QJsonValue value = object.value("Year");
if (value.isInt()) {
int nFrom = value.toVariant().toInt();
qDebug() << "From : " << nFrom;
}
}
if (object.contains("Platform")) {
QJsonValue value = object.value("Platform");
if (value.isBool()) {
bool bCrossPlatform = value.toBool();
qDebug() << "CrossPlatform : " << bCrossPlatform;
}
}
}
}

标签:Qt,Demo,object,json,value,label,Json,ui,QString
From: https://blog.51cto.com/u_15854865/5811262

相关文章