2017-06-13 62 views
-1

我得到不同的json对象,我需要检测json消息的类型(卖家列表,客户列表,产品,订单等)。json的检测类型

的Json类型1:

{"Sellers": [ 
     { "name":"A", "ID":5 }, 
     { "name":"B", "ID":4 } 
    ] 
} 

的Json类型2:

{"Clients": [ 
     { "name":"A", "SelectedProduct": "DDD" }, 
     { "name":"B", "SelectedProduct": "CCC" } 
    ] 
} 

的Json类型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对象类型的最佳方法?我可以在内部检测到它吗让后卫让JSON区域?

+0

持有什么你想'后卫let'? – Desdenova

+1

不知道你在做什么。 'guard let'语句可以确保'卖家!= nil'和'clients!= nil'这两个if语句总是会发生。 – Connor

+1

但是,如果你想分开处理所有这些领域,那么你为什么要把它们作为一个整体来对待?只要从警卫中删除这些人并分别进行测试。你的问题不清楚。 – Moritz

回答

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 = ... 
}