Qt解析json不成功怎么回事?Xml文件qt如何读取?

阳光 2021-11-26 21:34:17 java常见问答 9976

JSON是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成,在实际工作中,我们会使用qt解析json,但是也会遇到Qt解析json不成功得到情况,那这是怎么回事呢?下面来我们就来给大家讲解一下。

如果解析不了的话,肯定是没有正确解析,大家可以参考解析的主要步骤如下:

1、将来源数据转化为JsonDocument。可用它的构造函数,或setArray、setObject,或它的静态成员函数。

2、可用下列四函数判断它的最外层数据类型(一般是个对象):

bool isArray() const

bool isEmpty() const

bool isNull() const

bool isObject() const

3、知道类型后,用以下函数将它转化为json对象或json数组或Map

QJsonArray array() const

QJsonObject object() const

QVariant toVariant() const

一般方法

// 创建 QJsonParseError 对象,用来获取解析结果
QJsonParseError error;
// 使用静态函数获取 QJsonDocument 对象
QJsonDocument jsonDocument = QJsonDocument::fromJson(json.toUtf8(), & error);
// 根据解析结果进行处理
if (error.error == QJsonParseError::NoError)
{
    if (!(jsonDocument.isNull() || jsonDocument.isEmpty()))
    {
        if (jsonDocument.isObject())
        {
            // ...
        }
        else if (jsonDocument.isArray())
        {
            // ...
        }
    }
}
else
{
    // 检查错误类型
}

以下是qt解析json实例:

json文件内容如下:

{
"result": [
[
"笔记本电脑包",
"174006.44952143155"
],
["笔记本电脑支架",
"10922.010325770798"
],
[
"笔记本电脑游戏本",
"5234.557238132601"
],
[
"笔记本电脑 轻薄便携 学生",
"63230.4791839193"
],
[
"笔记本电脑包14寸",
"60253.89348659004"
],
[
"笔记本电脑包 15.6英寸",
"12103.593989071038"
],
[
"笔记本电脑苹果",
"114121.56232963233"
],
[
"笔记本电脑女生款超薄",
"5894.598044196088"
],
[
"笔记本电脑超薄",
"15421.232512795516"
],
[
"笔记本电脑支架托架",
"14211.73642800944"
]
]
, "tmall": "笔记本电脑"
}

解析代码如下:

// 解析json文件
QFile file(":/data.json");
file.open(QIODevice::ReadOnly | QIODevice::Text);
QString jsonValue = file.readAll();
file.close();
// 解析JSON字符串
QJsonParseError parseJsonErr;
QJsonDocument document = QJsonDocument::fromJson(jsonValue.toUtf8(), & parseJsonErr);
if (!(parseJsonErr.error == QJsonParseError::NoError))
{
    qDebug() << tr("解析json文件错误!"); < p = "" >
        return;
}
QJsonObject jsonObject = document.object();
if (jsonObject.contains(QStringLiteral("result")))
{
    QJsonValue resultValueList = jsonObject.value(QStringLiteral("result"));
    if (resultValueList.isArray())
    {
        QJsonArray array = resultValueList.toArray();
        for (int i = 0; i < array.size(); i++)
        {
            QJsonValue sonArray = array.at(i);
            if (sonArray.isArray())
            {
                QJsonArray grandsonArry = array.at(i)
                    .toArray();
                for (int j = 0; j < grandsonArry.size(); j++)
                {
                    QString str = grandsonArry.at(j)
                        .toString();
                    qDebug() << str;
                }
            }
        }
    }
}

qDebug() << "tmall =" << jsonObject["tmall"].toString();

Xml文件qt如何读取?

一、读取:

如下所示,QFile打开文件后,使用QXmlStreamReader对文件进行读取,读取过程中是逐条语句读取,根据elementName来获取相应的属性。

Qt解析json不成功怎么回事?Xml文件qt如何读取?.png

二、写:writeStartDocument与writeEndDocument,writeStartElement与writeEndElement 必须成对出现。writeAttribute写element的属性。

1.png

XML文件格式是纯文本格式,如果大家想要用qt读取,可以按照以上的方法就可以将xml文件读取成功了!最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。

推荐阅读:

qtjson中包含数据数组怎么存excel表格?实例讲解

qt怎么获取https的json?qt有什么优点?

java架构师需要几年?java架构师是做什么的?