使用swift 4创建嵌套json的最优雅方法是什么?

时间:2017-12-19 13:45:44

标签: json swift encodable

使用唯一的参数

从此结构创建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 个答案:

答案 0 :(得分:1)

两种方式:

  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) }
    
  2. 使用信封结构

    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) }
    
  3. 恕我直言,这不是一个优雅的问题,而是一个效率问题。优雅在于不指定encode(toCodingKeys