2017-07-19 4 views
3

私はSwift 4の新機能で、JsonをJavaのGsonのように自動的にスウィフトオブジェクトに変換する方法を理解しようとしています。私のjsonをオブジェクトに変換でき、その逆も可能なプラグインがありますか?私はSwiftyJsonライブラリを使用しようとしましたが、jsonをオブジェクトマッパーに直接変換するための構文は何かを理解できませんでした。 Gson変換で は以下の通りです:スウィフト4 - どのようにJsonをスウィフトオブジェクトに自動変換するのですか?

1. String jsonInString = gson.toJson(obj); 
2. Staff staff = gson.fromJson(jsonInString, Staff.class); 

あなたは私のような初心者のためのいくつかの本当に簡単な例を提案してくださいすることができます。以下の私の迅速な人のクラスです:

以下
class Person { 
    let firstName: String 
    let lastName: String 

    init(firstName: String, lastName: String) { 
     self.firstName = firstName 
     self.lastName = lastName 
    } 
} 

は、サーバからの応答を取得するメソッドの呼び出しです:

let response = Helper.makeHttpCall(url: "http://localhost:8080/HttpServices/GetBasicJson", method: "PUT", param: interestingNumbers) 

応答変数イムでJSON "{\\" firstNameの\\なって "\\" John \\ "、\\" lastName \\ ":\\" doe \\ "}"

+1

Swift 4は、この目的のために 'Codable'プロトコルと' JSONEncoder'/'JSONDecoder'を導入しました。 [Here](http://swiftjson.guide)は、このトピックに関する本当に包括的なガイドです。 – Alladinian

答えて

4

Swiftの外部ライブラリはもう必要ありません。 Swift 4の場合、とEncodableの2種類のプロトコルがCodableのタイプ別名とJSONDecoderにグループ化されています。

Codableに準拠するエンティティを作成するだけで済みます(この例では、Decodableで十分です)。

struct Person: Codable { 
    let firstName, lastName: String 
} 

// Assuming makeHttpCall has a callback: 
Helper.makeHttpCall(url: "http://localhost:8080/HttpServices/GetBasicJson", method: "PUT", param: interestingNumbers, callback: { response in 
    // response is a String ? Data ? 
    // Assuming it's Data 
    let person = try! decoder.decode(Person.self, for: response) 

    // Uncomment if it's a String and comment the line before 
    // let jsonData = response.data(encoding: .utf8)! 
    // let person = try! decoder.decode(Person.self, for: jsonData) 
    print(person) 
}) 

さらに詳しい情報:

+0

そうですが、JSONArrayはいつ使用しますか?あなたは "JSONObject"でラップしていますか? – firetrap

+0

いいえ、あなたは 'let persons = try! 'を使うことができます。 decoder.decode([Person.self]、for:response) ' – nathan

関連する問題