qt json

简单入门
json基本规则:

  1. 数据使用名/值对表示。
  2. 使用大括号保存对象,每个名称后面跟着一个 ‘:’(冒号),名/值对使用 ,(逗号)分割。
  3. 使用方括号保存数组,数组值使用 ,(逗号)分割。

类QJsonValue

用于封装JSON值

类QJsonObject

负责封装JSON对象,是键/值对列表,其中键是惟一的字符串,值由QJsonValue表示。
初始化方式:

QJsonObject jsonObject;
jsonObject["key1"] = 1;
jsonObject["key2"] = 6.6;
jsonObject.insert("key3", "Hello world");
jsonObject["array"] = QJsonArray({1, 2, 3}); 
//或者
QJsonObject jsonObject
{
    {"key1", 1},
    {"key2", 6.6},
    {"key3", "Hello world"},
    {"array", QJsonArray({1, 2, 3})}
};

QJsonArray

负责封装JSON数组,JSON数组是一个值列表,接口与QVariantList类似,QJsonArray与QVariantList可以互相转换。
QJsonList操作于QList相似,都具有size()、insert()和removeAt()等操作,还可以使用标准的C++迭代器模式对其内容进行迭代。
直接赋值使用:

QJsonArray jsonArray = { 1, 6.6, QString("Hello world") };

接口操作使用:

QJsonArray jsonArray;
jsonArray.append(1);
jsonArray.append(6.6);
jsonArray.insert(2, "Hello world");

QJsonDocument

// 使用QJsonDocument设置该json对象
QJsonDocument jsonDoc;
jsonDoc.setObject(jsonObject);

// 将json以文本形式写入文件并关闭文件。
file.write(jsonDoc.toJson());
file.close();

练习

{
    "Company": "Digia",
    "From": 1991,
    "Name": "Qt",
    "Page": {
        "Developers": "https://www.qt.io/developers/",
        "Download": "https://www.qt.io/download/",
        "Home": "https://www.qt.io/"
    },
    "Version": [
        4.8,
        5.2,
        5.7
    ]
}

其中 "Page"的值是一个QJsonObject对象,"Version"是一个列表

// 构建 Json 数组 - Version
QJsonArray versionArray;
versionArray.append(4.8);
versionArray.append(5.2);
versionArray.append(5.7);
 
// 构建 Json 对象 - Page
QJsonObject pageObject;
pageObject.insert("Home", "https://www.qt.io/");
pageObject.insert("Download", "https://www.qt.io/download/");
pageObject.insert("Developers", "https://www.qt.io/developers/");
 
// 构建 Json 对象
QJsonObject json;
json.insert("Name", "Qt");
json.insert("Company", "Digia");
json.insert("From", 1991);
json.insert("Version", QJsonValue(versionArray));
json.insert("Page", QJsonValue(pageObject));
 
// 构建 Json 文档
QJsonDocument document;
document.setObject(json);
QByteArray byteArray = document.toJson(QJsonDocument::Compact);
QString strJson(byteArray);
 
qDebug() << strJson;
 

QString和QJsonObject的相互转化

// QString >> QJson
QJsonObject getJsonObjectFromString(const QString jsonString){
    QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonString.toLocal8Bit().data());
    if( jsonDocument.isNull() ){
        qDebug()<< "===> please check the string "<< jsonString.toLocal8Bit().data();
    }
    QJsonObject jsonObject = jsonDocument.object();
    return jsonObject;
}
// QJson >> QString
QString getStringFromJsonObject(const QJsonObject& jsonObject){
    return QString(QJsonDocument(jsonObject).toJson());
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值