анализ json данных в c ++ с библиотекой Qt - PullRequest
0 голосов
/ 17 марта 2020

У меня есть точно следующие 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();

}

Может кто-нибудь предложить мне как я могу выполнить sh это с той же библиотекой выше?

1 Ответ

1 голос
/ 17 марта 2020

Я удалил последнюю запятую в списке контактов.

Ваша ошибка - трактовать QJsonValue так, как вы хотите, но QJsonValue - это что-то вроде обертки, поэтому вы должны преобразовать ее в соответствующий объект (массив, объект, строку и т. Д. c.).

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

...