QT解析和组装json

2018-08-02 05:43:50来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

json这个小朋友熟悉又陌生,今天给同学们好好讲讲QT是如何使用json的,一句话:简单

1、什么是json?

A:json就是个<key,value>字符串

①一个json对象

{"name":"xupeidong","age":"18"}

②一个json数组里面嵌套json对象

[
{"price": "1", "name": "1", "id": "1"}, 
{"price": "2", "name": "2", "id": "2"}, 
{"price": "3", "name": "3", "id": "3"}
]

2、QT里面如何使用json

#include <QJsonDocument>   //解析类,用于将json转换为QByteArrar,或从QByteArray解析出json
#include <QJsonArray>   // 封装json数组:["1","2","3"]
#include <QJsonObject>  // 封装json对象:{"name": "111","pass": 222}
#include <QJsonParseError> //错误类

①json对象

组装:

QJsonObject json;
json.insert("name", "111");
json.insert("pass", 222);
QJsonDocument doc;
doc.setObject(json);
QByteArray byte = document.toJson(QJsonDocument::Compact);

解析:

QJsonParseError error;
QJsonDocument doc = QJsonDocument::fromJson(byte, &error); 
if(error.error == QJsonParseError::NoError) 
{  
    if(doc.isObject())  
    {  
        QJsonObject obj = doc.object(); 
        if(obj.contains("name"))  
    {
       QJsonValue value = obj.take("name");
       qDebug() << value.toString();
    }
    }
}

②json数组

组装:

格式:"[\"000\",\"111\"]"
QJsonArray json;
json.insert(0, "000");
json.insert(1, "111");
QJsonDocument doc;
doc.setArray(json);
QByteArray byte = doc.toJson(QJsonDocument::Compact);
还可以插入json对象:
格式:"[{\"0\":\"000\"},{\"1\":\"111\"}]"
QJsonArray json;
QJsonObject obj;
obj.insert("0","000");
json.insert(0, obj);
QJsonObject obj1;
obj1.insert("1","111");
json.insert(1, obj1);
QJsonDocument doc;
doc.setArray(json);
QByteArray byte = doc.toJson(QJsonDocument::Compact);

解析:

QJsonParseError error;
QJsonDocument doc = QJsonDocument::fromJson(byte, &error); 
if(error.error == QJsonParseError::NoError) 
{  
    if(doc.isArray())  
    {  
        QJsonArray array = doc.array(); 
        for(int i=0; i<array.size();i++)
        {
            QJsonValue value = array.at(i);
        }
    }
}

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:洛谷P3773 [CTSC2017]吉夫特(Lucas定理,dp)

下一篇:BZOJ2938: [Poi2000]病毒(AC自动机)