0

Qjson を使用して、Web サービスから返された json オブジェクトを解析しています。複雑なオブジェクトの配列を処理することに行き詰まっています。

最初のレベルでは、Web サービスは "error"、"id"、および "return" で構成されるマップを返します。エラーがない場合は、次を使用して最初のレベルの値を取得できます

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

を使用して、第 2 レベルの日付項目値を取得することもできます

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

29 個のキーと値のペアで構成される「Elements」というオブジェクトがあります。Web サービスはこれらの「要素」の配列を返していますが、それを解析する正しい方法を見つけることができません。ヘッダー ファイルでは、要素のコンテナーは次のように定義されます。

QList<GroupElement> Elements;

この線

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

コンパイラがエラー「エラー: 'operator=' が '((MyClass*)this)->MyClass::group->Group::Elements = QVariant::toMap() const()' に一致しません」をスローします。

この要素をクラスに入れるための正しい構文を学びたいです。

4

1 に答える 1

0

更新:QVariantMapオブジェクトをに変換する別の関数を作成しました

最初:group->Elementsオブジェクトがに変更されました

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

2番目: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;
}

3番目:コードでは、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))
}
于 2012-10-27T01:28:52.483 に答える