Qt中解析Json的总结

项目中用到要解析json格式的数据。特地总结了一下Qt中解析json的方法如下:

1、使用Qt中QScript类函数自己解析。(工作量太大)

       请参考文章:http://blog.chinaunix.net/uid-20737871-id-1881233.html

                               http://blog.youkuaiyun.com/darkdong/article/details/6092822

2、使用最新版的Qt5版本,Qt5以上版本添加好多关于JavaScript的内容,其中就有关于解析json格式数据的函数。

      此方法简单,但因为楼主用的是Qt4.8版本,同时对于Qt5新版本的稳定性不太确定,所以也没用。等到Qt5稳定后可以考虑。

      部分代码如下:

void MainWindow::replyFinished(QNetworkReply* replay)
{
    if(replay->error() == QNetworkReply::NoError)
    {
        QByteArray data = replay->readAll();
        
        QJsonParseError jsonError;//Qt5新类
        QJsonDocument json = QJsonDocument::fromJson(data, &jsonError);//Qt5新类
        if(jsonError.error == QJsonParseError::NoError)//Qt5新类
        {
            if(json.isObject())
            {
                QJsonObject obj = json.object();//Qt5新类
                if(obj.contains("weatherinfo"))
                {
                    if(obj["weatherinfo"].isObject())
                    {
                        QJsonObject weatherObj = obj["weatherinfo"].toObject();
                        weatherMap = weatherObj.toVariantMap();
                        //qDebug() << weatherMap;
                        showWeather();
                        return;
                    }
                }
            }
        }
      
    }
}

 

3、使用外部库QJson。

    本篇着重介绍QJson的使用方法,网上的一些使用方法不全面,光是QJson编译就让人抓狂,楼主找到了一篇全面详细的介绍。

   网址:http://hi.baidu.com/imtoby/item/02cc71572376ef0ce7c4a556#713670-baidu-1-26095-a19db458d50b3e9d45067067b6ce7d52

  楼主整理了源代码文件,网址:http://download.youkuaiyun.com/detail/wangtaohappy/5434393

  使用Qt 编译方法:

  源代码文件是不包含的QJSon.pro工程文件的,因此我们可以手动创建一个QJSon.pro文件(可以新建txt文件将后缀改为.pro即可,使用txt文档打开QJSon.pro文件。

 在文件中加入如下工程代码:

TEMPLATE = lib
TARGET = 
DEPENDPATH += .
INCLUDEPATH += .
include(./json.pri)
LIBS += -lws2_32


 启动QtCreator,打开上面的工程,即打开QJSon.pro后,将版本改为发布版本,请选择启动编译的“发布”选项:

设置完成之后,既可以选择“运行”。如果出现如下情况,点取消,不用管它。

运行完成,在release文件夹下,会有libqjson.a和QJson.dll文件,这两个就是要用到的最关键的文件。如下图

楼主也把他们打包放在链接:http://download.youkuaiyun.com/detail/wangtaohappy/5434393

可以直接下载下来用。(注意环境:win7下Qt Creator环境)

 

release文件夹里面的libQJSon.a放到<Qt dir>\lib 目录中,例如本人将它放在了:D:\QtSDK\Desktop\Qt\4.8.1\lib 目录中,

再在release文件夹里面找到QJSon.dll文件,将它放到<Qt dir>\bin目录中,本人放在了:D:\QtSDK\Desktop\Qt\4.8.1\bin目录中。

接下来,创建一个名为QJSon的文件夹,然后将之前的代码目录中的所有头文件(*.h*.hh)都拷贝到新创建的QJSon的文件夹中,将QJson文件夹放到

D:\QtSDK\Desktop\Qt\4.8.1\include目录中。

 

 

接下来,就是测试QJson的使用。这方面文章很多,可以自行搜索,

给出几个参考网址:http://www.developer.nokia.com/Community/Wiki/%E5%9C%A8Qt%E4%B8%AD%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87QJson_%E8%A7%A3%E6%9E%90json%E6%95%B0%E6%8D%AE

http://www.oschina.net/code/snippet_12_332?from=rss

http://blog.chinaunix.net/uid-12664992-id-129941.html

 

 

Qt 框架中解析 JSON 数据,通常使用 Qt 提供的 `QJsonDocument`、`QJsonObject`、`QJsonArray` 和 `QJsonValue` 等类来处理。以下是解析 JSON 数据的方法和步骤: ### 解析 JSON 数据的基本方法 1. **加载 JSON 数据** 首先,需要将 JSON 数据加载为 `QByteArray` 或从文件中读取 JSON 数据。 ```cpp QFile file("data.json"); file.open(QIODevice::ReadOnly); QByteArray byte = file.readAll(); file.close(); ``` 2. **将 JSON 数据转换为 QJsonDocument 对象** 使用 `QJsonDocument::fromJson()` 方法将 JSON 数据转换为 `QJsonDocument` 对象。 ```cpp QJsonDocument doc = QJsonDocument::fromJson(byte); ``` 3. **解析QJsonObject 或 QJsonArray** 如果 JSON 数据是对象格式,则使用 `object()` 方法获取 `QJsonObject`;如果是数组格式,则使用 `array()` 方法获取 `QJsonArray`。 ```cpp if (doc.isObject()) { QJsonObject obj = doc.object(); } else if (doc.isArray()) { QJsonArray array = doc.array(); } ``` 4. **提取 JSON 数据中的键值对** 通过 `QJsonObject` 可以访问 JSON 数据中的键值对。例如,提取 `"name"` 字段的值: ```cpp QJsonValue nameValue = obj.value("name"); QString name = nameValue.toString(); ``` 5. **解析嵌套的 JSON 数据结构** 如果 JSON 数据包含嵌套对象或数组,可以递归解析。例如,解析嵌套对象中的字段: ```cpp QJsonValue instructorValue = courseObject.value("instructor"); if (instructorValue.isObject()) { QJsonObject instructorObject = instructorValue.toObject(); QString instructorName = instructorObject.value("name").toString(); QString instructorEmail = instructorObject.value("email").toString(); } ``` 6. **处理 JSON 数组** 如果 JSON 数据包含数组,可以使用 `QJsonArray` 进行遍历和解析。例如,解析 `"courses"` 数组中的每个课程信息: ```cpp QJsonValue coursesValue = obj.value("courses"); if (coursesValue.isArray()) { QJsonArray coursesArray = coursesValue.toArray(); for (const QJsonValue &courseValue : coursesArray) { QJsonObject courseObject = courseValue.toObject(); QString courseName = courseObject.value("courseName").toString(); int credits = courseObject.value("credits").toInt(); } } ``` ### 示例代码:解析嵌套 JSON 数据 以下是一个完整的示例代码,展示了如何解析嵌套的 JSON 数据结构: ```cpp QJsonDocument doc = QJsonDocument::fromJson(byte); if (!doc.isNull()) { QJsonObject obj = doc.object(); QString name = obj.value("name").toString(); int age = obj.value("age").toInt(); bool isStudent = obj.value("isStudent").toBool(); QJsonArray coursesArray = obj.value("courses").toArray(); for (const QJsonValue &courseValue : coursesArray) { QJsonObject courseObject = courseValue.toObject(); QString courseName = courseObject.value("courseName").toString(); int credits = courseObject.value("credits").toInt(); QJsonObject instructorObject = courseObject.value("instructor").toObject(); QString instructorName = instructorObject.value("name").toString(); QString instructorEmail = instructorObject.value("email").toString(); } } ``` ###
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值