2017-12-19 8 views
0

このJSON文字列の中に一つだけのパラメータswift 4を使ってネストされたjsonを作成する最もエレガントな方法は何ですか?

struct SessionStorage: Encodable { 
     var value: String 

     func encode(to encoder: Encoder) throws { 
      var container = encoder.container(keyedBy: CodingKeys.self) 
     /// the magic 
     } 

     enum CodingKeys: String, CodingKey { 
      case params 
     } 
    } 

で、この構造体からJSONを作成するための最もエレガントな方法は何ですか?

{"params": {"value": "{value}"}}

私は、ネストされた構造体を作成する必要はありません。

答えて

1

二つの方法:[String: SessionStorage]

struct SessionStorage: Encodable { 
    var value: String 
} 

let session = SessionStorage(value: "Foo") 

do { 
    let jsonData = try JSONEncoder().encode(["params" : session]) 
    print(String(data: jsonData, encoding: .utf8)!) 
} catch { print(error) } 
  • struct Envelope : Encodable { 
        let params : SessionStorage 
    } 
    
    
    struct SessionStorage: Encodable { 
        var value: String 
    } 
    
    let envelope = Envelope(params : SessionStorage(value: "Foo")) 
    
    do { 
        let jsonData = try JSONEncoder().encode(envelope) 
        print(String(data: jsonData, encoding: .utf8)!) 
    } catch { print(error) } 
    
  • エンベロープの構造体を使用して

    1. 辞書をエンコード私見それはだ、優雅さの問題ではありませんクエスト効率のn。エレガンスは指定しないでくださいencode(toCodingKeys

    +0

    素敵なアバターハット:) – Vyacheslav

    +0

    @Vyacheslavこれは、獲得冬のバッシュの帽子の一つです。 – vadian

    関連する問題