SwiftサードパーティJSON転模型対象利器

3956 ワード

最新の神器JSONExport
Swift漢化版JSONExport
swiftモデルファイルを自動的に生成すると、任意のJSON文字列でSwift対応モデル(クラス、構造体、Core Dataクラス、Realmクラス、SwiftlyJSONクラス)を生成し、ヘルプメソッド(インスタンスをNSDictionaryに戻す)を生成できます.
JSONUtilities -
      JSON            

GitHubアドレス:https://github.com/lucianomarisi/JSONUtilities
D3Json -
       swift     , json     model  

GitHubアドレス:https://github.com/mozhenhau/D3Json
JSONU tilities使用
①直接json復号
例えば、個人情報のJSONデータ
           { 
             "name" : "John Doe", 
             "age" : 24,
             "weight" : 72.4
           }

    let jsonDictionary = try JSONDictionary.fromFile("person") //  json  
    let name: String = try jsonDictionary.jsonKey("name")
    let age: Int = try jsonDictionary.jsonKey("age")
    let weight: Int = try jsonDictionary.jsonKey("weight")
    let profession: String? = jsonDictionary.jsonKey("profession") //     

②構造体又はクラスに復号する
    struct Person {
        
        let name : String
        let age : Int
        let weight : Double
        let profession : String?
        
        init(jsonDictionary: JSONDictionary) throws {
            name = try jsonDictionary.jsonKey("name")
            age = try jsonDictionary.jsonKey("age")
            weight = try jsonDictionary.jsonKey("weight")
            profession = jsonDictionary.jsonKey("profession")
        }
        
    }
    class Person {
        
        let name : String
        let age : Int
        let weight : Double
        let profession : String?
        
        init(name: String,
            age: Int,
            weight: Double
            profession: String?) {
                self.name = name
                self.age = age
                self.weight = weight
                self.profession = profession
        }
        
        //             ,  Swift    throw     
        convenience init(jsonDictionary: JSONDictionary) throws {
            self.init(
                name : try jsonDictionary.jsonKey("name"),
                age : try jsonDictionary.jsonKey("age"),
                weight : try jsonDictionary.jsonKey("weight"),
                profession : try jsonDictionary.jsonKey("profession")
            )
        }
        
    }

③ネストされた構造体またはクラスを復号するには復号可能なプロトコルに従う必要がある
例:社員情報のJSON対象
    {
        "name" : "Working name LTD.",
        "employees": [
        {
        "name": "John Doe",
        "age": 24,
        "weight": 72.4
        },
        {
        "name": "Jane Doe",
        "age": 22,
        "weight": 70.1
        }
        ]
    }
    struct Company {
        let name: String
        let employees: [Person]
        
        init(jsonDictionary: JSONDictionary) throws {
            name = try jsonDictionary.jsonKey("name")
            employees = try jsonDictionary.jsonKey("employees")
        }
    }

    //                    
    struct Person:Decodable {
        let name : String
        let age : Int
        let weight : Double
        let profession : String?
        
        init(jsonDictionary: JSONDictionary) throws {
            name = try jsonDictionary.jsonKey("name")
            age = try jsonDictionary.jsonKey("age")
            weight = try jsonDictionary.jsonKey("weight")
            profession = jsonDictionary.jsonKey("profession")
        } 
    }

--
D 3 Json使用
①jsonデータ転送モデル
   var user:User = User.jsonToModel(json) // json     User 

②jsonデータをArrayクラスに変換
     var users = User.jsonToModelList(jsonArr) as! Array