6

我需要解析一个看起来像这样的 json 响应并获取 id 值,即 blabla2:

{
 "kind": "blabla",
 "id": "blabla2",
 "longUrl": "blabla3"
}

我怎么做?我尝试使用 Qjson,但是当我尝试构建它以获取.dll.

xlocale.h 丢失。

在此处输入图像描述

还有其他选择吗?谢谢。

4

2 回答 2

9

查看 QJsonDocument 的文档,您可以将文件读入 QByteArray,然后执行以下操作:-

// assuming a QByteArray contains the json file data

QJsonParseError err;
QJsonDocument doc = QJsonDocument::fromJson(byteArray, &err);

// test for error...

然后使用 QJsonDocument 上的函数来检索顶级对象...

if(doc.isObject())
{
    QJsonObject obj = doc.object();
    QJsonObject::iterator itr = obj.find("id");
    if(itr == obj.end())
    {
        // object not found.
    }

    // do something with the found object...

}

QJsonObject 中还有一个 value() 函数,所以不用使用迭代器和调用 find,你可以简单地调用:-

QJsonValue val = obj.value("id");

免责声明:我在刚刚阅读了 Qt 文档后展示了此代码,因此不要只是复制和粘贴它,而应将其视为伪代码。您可能需要对其进行一些编辑,但希望对您有所帮助。

于 2013-07-24T13:31:13.667 回答
3

我鼓励您使用 Qt 5 或将 json 类反向移植到 Qt 4。当您打算将其移植到 Qt 5 时,您的软件将更具未来性,因为您需要重写 QtCore 中可用的 json 解析。

我会写类似下面的代码,但是在生产中使用它之前请仔细检查它,因为我可能在编写它时错过了错误检查。无论错误检查如何,输出都是您想要得到的。

主文件

#include <QFile>
#include <QByteArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDebug>

int main()
{
    QFile file("main.json");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        qDebug() << "Could not open the file" << file.fileName() << "for reading:" << file.errorString();
        return 1;
    }

    QByteArray jsonData = file.readAll();
    if (file.error() != QFile::NoError) {
        qDebug() << QString("Failed to read from file %1, error: %2").arg(file.fileName()).arg(file.errorString());
        return 2;
    }

    if (jsonData.isEmpty()) {
        qDebug() << "No data was currently available for reading from file" << file.fileName();
        return 3;
    }

    QJsonDocument document = QJsonDocument::fromJson(jsonData);
    if (!document.isObject()) {
        qDebug() << "Document is not an object";
        return 4;
    }
    QJsonObject object = document.object();
    QJsonValue jsonValue = object.value("id");
    if (jsonValue.isUndefined()) {
        qDebug() << "Key id does not exist";
        return 5;
    }
    if (!jsonValue.isString()) {
        qDebug() << "Value not string";
        return 6;
    }

    qDebug() << jsonValue.toString();
    return 0;
}

主程序

TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp

构建并运行

qmake && make && ./main

输出

"blabla2"
于 2014-12-21T16:38:54.553 回答