qt解析不了json怎么回事?qt解析json实例

阳光 2021-02-05 22:12:13 java常见问答 4516

JSON是一种轻量级的数据交换格式,简洁和清晰的层次结构使得 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();

其实qt解析json文件也没有什么难度,如果实在不会的话,大家可以将例子记下,也可以自己在平时的时候多研究几遍就可以了,最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。

推荐阅读:

json文件怎么转换shp文件?shp文件用什么打开?

ultraedit怎么排序?ultraedit有哪些功能?

java入门知识点有哪些?java入门知识点分享