2013-12-18 117 views
0

我有一個JSON結構是這樣的:如何映射這個JSON數組對象RestKit 2

[ 
    { 
     "id" : "1", 
     "name" : "Group 1" 
    }, 
    { 
     "id" : "2", 
     "name" : "Group 2" 
    }, 
    { 
     "id" : "3", 
     "name" : "Group 3" 
    } 
] 

請注意它始於[和結尾。 如何使用RestKit 2將此類似JSON映射到Group對象數組?

我試圖與經典:

RKObjectMapping* groupMapping = [RKObjectMapping mappingForClass:[Group class]]; 
[groupMapping addAttributeMappingsFromDictionary:@{ 
     @"id" : @"groupID", 
     @"name" : @"name" 
}]; 
return groupMapping; 

然後我使用RKMappingTest驗證映射,但是我通常收到錯誤:

restkit.object_mapping:RKMappingOperation.m:440 Failed transformation of value at keyPath 'id' to representation of type 'NSString': Error Domain=org.restkit.RKValueTransformers.ErrorDomain Code=3002 "Failed transformation of value... 

與JSON解析的後

_parsedJSON = [RKTestFixture parsedObjectWithContentsOfFixture:@"groups.json"]; 

_parsedJSON是一個字典數組。

+0

它是否適用於真實測試而不是測試?我不記得是否有'NSString'轉換爲'NSNumber'的限制...... – Wain

+0

問題不在於將'NSString'轉換爲'NSNumber',而是使用JSON結構。如果一個JSON的格式類似{「」:[<對象數組>]}(注意括號{}),一切都會好起來的。 – mixtly87

回答

1

Failed transformation of value at keyPath 'id'

這是因爲它不能將數組轉換爲字符串。

您使用的測試類型無法處理此JSON,因爲它不是單個映射,而是多個映射,並且映射類不處理多重性。

映射運行時,它會調用數組上的valueForKey:並返回一個數組。它期望調用字典並獲取一個字符串(或數字)。

所以,基本上,只測試映射單個對象。

+0

但有沒有什麼辦法可以將這個JSON映射到一個對象數組?這是我從REST服務器獲得的,我無法更改它。我願意在映射開始之前嘗試改變JSON。 RestKit 2中有一個鉤子,我可以更改解析的JSON(即,創建一個可容納數組的字典)?然後我可以成功映射。 – mixtly87

+0

我們正在談論一個測試 - 使之合適。映射測試只應檢查映射本身。這是一件很奇怪的事情。如果你將'destinationObject'設置爲一個可變數組,那麼RestKit可能會推斷出你想要的東西,但不確定。 – Wain

+0

在這種情況下,它不會映射到數組。但是我決定測試單個對象映射,而不是一個對象數組,因爲那樣會自動工作。 – mixtly87