Objectmapper Dictionary给Json swift? Swift 2 - >斯威夫特3

时间:2016-10-06 11:04:29

标签: ios swift dictionary swift3 objectmapper

我有问题要将Dictionary json送到我的" MyOwnClass"。在Swift 2中一切都很好。

我的Json结构:

[
    {
        "dataString1" : "value",
        "dataInt1" : 3277
    },
    {
        "dataString1" : "value",
        ... and so on    

我在Swift 2.x中使用了Objectmapper,但现在我想在Swift 3中转换所有内容。

我的旧代码:

do {
    let jsonSerilization = try NSJSONSerialization.JSONObjectWithData(json, options: NSJSONReadingOptions.MutableContainers) as! NSArray

    for jsonCount in 0..<jsonSerilization.count {
         let singleData = Mapper<MyOwnClass>().map(jsonSerilization[jsonCount])
         print(singleData.dataString1) //gotValue
    }


} catch {
    ...
    }

现在行jsonSerilization[jsonCount]是一本字典。在控制台中,我找到了所有的价值观。

但是我希望这个字典在我的&#34; MyOwnClass&#34;结构体。我无法将我的字典转换为字符串。我试过了dictionary.description,但这个字符串格式错误。

MyOwnClass Strucutre并不特别。

class MyOwnClass : Mappable {
 var dataString1: String?
 var dataInt1: Int?

 required init?(map: Map){
     mapping(map: map)
 }

 func mapping(map: Map) {
    dataString1 <- map["dataString1"]
    dataInt1 <- map["dataInt1"]
 }
}

如何从我的&#34; MyOwnClass&#34;中的字典中传输值? 当然我可以手动完成,但我想要一个自动解决方案。

我google了很多转换字典到json字符串,但没有任何帮助。谢谢

修改 似乎ObjectMapper无法解析json的这种结构(State:10/2016) 如果我错了,请告诉我。

2 个答案:

答案 0 :(得分:3)

首先 - 一如既往 - 使用Swift原生集合类型。你将丢掉重要的类型信息。

其次,停止使用丑陋的C风格for循环。

第三,当只读JSON时,你根本不需要可变容器。

let jsonSerialization = try JSONSerialization.jsonObject(with:json, options: []) as! [[String:Any]]

for item in jsonSerialization {
    let singleData = Mapper<MyOwnClass>().map(JSON:item)
    print(singleData.dataString1) //gotValue
}

修改

对于两个属性,您根本不需要ObjectMapper。没有库

,它的代码更少
class MyOwnClass  {
  var dataString1: String?
  var dataInt1: Int?

  init(JSON: [String:Any]) {
    self.dataString1  = JSON["dataString1"] as? String
    self.dataInt1  = JSON["dataInt1"] as? Int
  }
}

并将其命名为

let singleData = MyOwnClass(JSON:item)

答案 1 :(得分:1)

在Swift 3中使用[[String:Any]]而不是NSArrayJSONObjectWithData也如下所示。

let jsonSerilization = try JSONSerialization.jsonObject(with: json, options: []) as! [[String:Any]]
for dic in jsonSerilization {
     let singleData = Mapper<MyOwnClass>().map(dic)
     print(singleData.dataString1) //gotValue
}