Qjson обрабатывает возвращенный массив объектов

Я использую Qjson для анализа объекта json, который возвращается из веб-службы. Я застрял на обработке множества сложных объектов.

На первом уровне веб-сервис возвращает карту, состоящую из «error», «id» и «return». Если ошибок нет, я могу получить значение первого уровня, используя

 nestedMap = m_jsonObject["result"].toMap();
group = new Group();
group->Caption = nestedMap["Caption"].toString();
group->CollectionCount = nestedMap["CollectionCount"].toInt();

Я даже могу получить значение элемента даты, которое находится на втором уровне, используя

group->ModifiedOn = nestedMap["ModifiedOn"].toMap()["Value"].toDateTime();

У меня есть объект под названием «Элементы», который состоит из 29 пар ключ-значение. Веб-сервис возвращает массив этих «элементов», и я не могу найти правильный способ его анализа. В заголовочном файле контейнер для элементов определяется как

QList<GroupElement> Elements;

Линия

group->Elements = nestedMap["Elements"].toList();

заставляет компилятор выдавать ошибку ‘ошибка: нет совпадения для’ operator = ‘in’ ((MyClass *) this) -> MyClass :: group-> Group :: Elements = QVariant :: toMap () const () ‘

Я хотел бы выучить правильный синтаксис для помещения этого элемента в класс.

0

Решение

Обновление: я написал другую функцию для преобразования объекта QVariantMap в

первый:
Объект group-> Elements был изменен на

class ParentClass{
QList<SharedDataPointer<Address> > Elements;
other class memmbers...
};

Во-вторых:
Был создан метод для преобразования объекта QMap в объект Address.

QSharedDataPointer<Address>
API_1_6::mapToAddress(QVariantMap o)
{
QSharedDataPointer<Address> address (new Address());
address-> FirstName = o["FirstName"].toString();
address->LastName = o["LastName"].toString();
address->CompanyName = o["CompanyName"].toString();
address->Street = o["Street"].toString();
address->Street2 = o["Street2"].toString();
address->City = o["City"].toString();
address->Zip = o["Zip"].toString();
address-> State = o["State"].toString();
address->Country = o["Country"].toString();
address->Phone = o["Phone"].toString();
address->Phone2 = o["Phone2"].toString();
address-> Fax = o["Fax"].toString();
address-> Url = o["Url"].toString();
address->Email = o["Email"].toString();
address->Other = o["Other"].toString();

return address;
}

третье: в коде foreach используется для обхода списка, создания и хранения новых объектов.

// get the list of the elements
elementsList = nestedMap["Elements"].toList();
// Add the element, converted to the new type, to the Elements object of the'parent' class
foreach(QVariant qElement, elementsList){
group-> Elements.append(mapToAddress(qElement))
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]