2017-06-29 21 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 
}