检测json的类型

时间:2017-06-13 13:11:56

标签: ios json swift

我得到了不同的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 区域内检测到它吗?

1 个答案:

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