我有问题要将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) 如果我错了,请告诉我。
答案 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]]
而不是NSArray
,JSONObjectWithData
也如下所示。
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
}