我得到了不同的json对象,我需要检测json消息的类型(卖家列表,客户列表,产品,订单......)。
Json type 1:
{"Sellers": [
{ "name":"A", "ID":5 },
{ "name":"B", "ID":4 }
]
}
Json type 2:
{"Clients": [
{ "name":"A", "SelectedProduct": "DDD" },
{ "name":"B", "SelectedProduct": "CCC" }
]
}
Json type 3:
{"ID": "78915"}
如何检测json的类型来解析它?
guard let JSON = try JSONSerialization.jsonObject(with:data, options: []) as? [String: Any],
let sellers = JSON["Sellers"] as? [[String: Any]],
let clients = JSON["Clients"] as? [[String: Any]],
let product = JSON["ID"] as? [String: Any],
else { return }
var type: JsonType
if(sellers != nil){
type = ...
}
if(clients != nil){
type = ...
}
检测json对象类型的最佳方法是什么?我可以在 guard let JSON 区域内检测到它吗?
答案 0 :(得分:2)
创建一个继承自NSOBJECT类的基类JSONTYPE。
创建其他3个类,即: 1.卖方 - > 2属性(名称,ID) 2.客户 - > 2属性(名称,SelectedProduct) 3. ID - > 1物业(ID)
所有这些都继承了JSONTYPE类。
然后按如下方式更改您的代码: -
guard let JSON = try JSONSerialization.jsonObject(with:data, options: []) as? [String: Any],
let sellers = JSON["Sellers"] as? [Seller],
let clients = JSON["Clients"] as? [Client],
let product = JSON["ID"] as? [ID],
else { return }
var type: JSONTYPE
if(sellers != nil){
type = ...
}
if(clients != nil){
type = ...
}