2017-06-13 8 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オブジェクトのタイプを検出する最も良い方法は何ですか?私はそれを検出することができますガードlet JSONエリア?

+0

'ガードlet'をしようとしてからあなたを保持していますか? – Desdenova

+1

あなたがしようとしていることがわかりません。 'guard let'ステートメントは、' sellers!= 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 = ... 
} 
関連する問題