2017-06-13 76 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 = ... 
}