-1

我有如下的 json 数据:

[
 {
  "id":"01323",
  "name":"Json Roy",
  "contacts":[
    "CONTACT1=+917673267299",
    "CONTACT2=+917673267292",
    "CONTACT3=+917673267293",
    "CONTACT4=+917673267294",
    ]
  }
]

我想解析上面的 jsonData 数据并提取该数据的联系人。

QJsonParseError jerror;
QJsonDocument jsonData = QJsonDocument::fromJson(jsonData.c_str(),&jerror);
QJsonArray jsonArray = jsonData.array();
QJsonObject jsonObject = jsonData.object();
 foreach (const QJsonValue & value, jsonArray){

 string contact=jsonObject["contacts"].toString().toUtf8().constData();

}

有人可以建议我如何使用上述相同的库来完成此操作吗?

4

1 回答 1

1

我删除了联系人列表中的最新逗号。

您的错误是QJsonValue按您的意愿对待,但QJsonValue它类似于包装器,因此您应该将其转换为适当的对象(数组、对象、字符串等)。

jsonData不是一个对象,所以jsonData.object()不会给你你想要的。

这是代码,它可能是您的起点。

#include <QString>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonValue>
#include <QJsonParseError>
#include <QDebug>
#include <string>

int main(){

    auto json_input = R"([
    {
     "id":"01323",
     "name":"Json Roy",
     "contacts":[
       "CONTACT1=+917673267299",
       "CONTACT2=+917673267292",
       "CONTACT3=+917673267293",
       "CONTACT4=+917673267294"
       ]
     }
   ])";

    QJsonParseError err;

    auto doc = QJsonDocument::fromJson( QString::fromStdString( json_input ).toLatin1() , &err );
    auto objects = doc.array();

    if ( err.error != QJsonParseError::NoError )
    {
        qDebug() << err.errorString();
        return 1;
    }

    for( auto obj_val : objects )
    {
        auto obj = obj_val.toObject();

        auto contacts = obj.value( "contacts" ).toArray();

        for ( auto contact_val : contacts )
        {
            auto cotact_str = contact_val.toString();

            qDebug() << cotact_str;
        }
    }
}

输出 :

CONTACT1=+917673267299 CONTACT2=+917673267292 CONTACT3=+917673267293 CONTACT4=+917673267294

于 2020-03-17T11:38:55.600 回答