2017-06-29 50 views
1

我在將JSON映射到我的對象類時遇到了問題。這裏是我的模型對象將JSON映射到模型而不考慮數組或對象 - ObjectMapper

class CityObject : NSObject, Mappable{ 
var id : String? 
var name : String? 

required init?(map: Map) { 
} 

func mapping(map: Map) { 
    id <- map["id"] 
    name <- map["name"] 
} 
} 

我從服務器某個時候得到的JSON響應可能是這樣的數組或對象。

陣:

{ 
"cities": [ 
{ 
    "id": "190", 
    "name": "Elurupadu" 
}, 
{ 
    "id": "1230", 
    "name": "Sendhwa" 
}, 
{ 
    "id": "1262", 
    "name": "Multai" 
}, 
{ 
    "id": "1480", 
    "name": "Kherwara" 
}] 
} 

有時候我喜歡這個,

{ 
"cities": {"id": "6","name": "Hyderabad"} 
} 

代替JSONArray它給我的JSONObject。

我映射到我的課像這樣,

let list = Mapper<CityObject>().mapArray(JSONObject:cities["cities"]) 

這工作完全當我得到JSONArray,但是當我得到的JSONObject同樣不起作用。

如何使用ObjectMapper處理兩者?

+4

修復您的服務器。它應該提供一致的模式。否則,您將需要有條件地向下轉換爲數組,如果失敗,則映射到字典 – Paulw11

+0

由於服務器也從第三方獲得此響應,因此目前無法在服務器端進行修復,您是否可以提供小代碼片段在我的最後有一個檢查器? –

+0

@Neo即使您的服務器在將它發送到您的應用程序之前,您的服務器接收到來自第三方的數據,您也可以檢查是否收到服務器端的字典或單個字典數組,如果它是單個字典,請將其包裝成一個數組在這種情況下,您的應用程序會收到單個字典的數組。或者如果你真的不能在服務器端改變任何東西,只要檢查'mapArray'是否成功,如果不成功,就將* cities *解析爲單個字典。 –

回答

1

根據Paulw11的建議下來鑄造MAP爲我工作。

if let list = Mapper<CityObject>().mapArray(JSONObject:cities["cities"]){ 
    //Handles JSONArray response 
} 
else if let list = Mapper<CityObject>().map(JSONObject: cities["cities"]){ 
    //Handles JSONObject response 
} 
else{ 
    //Handles error 
}