繁体   English   中英

Swift 2.0将对象数组转换为JSON字符串

[英]Swift 2.0 Array of object to JSON string

这是我的课:

public class Coordinate: NSObject{
public var lat: Double
public var lon: Double

init(latitude: Double, longitude: Double) {
    self.lat = latitude
    self.lon = longitude
}

init(coder aDecoder: NSCoder!) {
    self.lat = aDecoder.decodeObjectForKey("latitude") as! Double
    self.lon = aDecoder.decodeObjectForKey("longitude") as! Double
}

func encodeWithCoder(aCoder: NSCoder!) {
    aCoder.encodeObject(lat, forKey: "latitude")
    aCoder.encodeObject(lon, forKey: "longitude")
}

那就是我获取对象数组的字符串的方式:

var endlist = [Coordinate]()

let data = try NSJSONSerialization.dataWithJSONObject(endlist , options: options)           
let string = NSString(data: data, encoding: NSUTF8StringEncoding)          
json["points"] = string

现在我得到这个错误:

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'JSON写入中的类型无效(Test.Coordinate)'

有人可以帮我解决这个问题吗?

因此,在json [“ points”]中必须是这样的:

"points": [
{"lat": 47424212, "lon": 8855883},
{"lat": $lat2, "lon": $lon2}
]

谢谢!

您无法使用NSCoding以这种方式对Coordinate类进行编码。 您可以做的一件事是创建一种方法,将其转换为JSON对象,然后将其转换为json字符串。 然后,您可以使用简单的结构而不是NSObject类型的类。

public struct Coordinate {
    public var lat: Double
    public var lon: Double

    func toJSONDict() -> [String: String] {
        return [
            "lat": String(lat),
            "lon": String(lon)
        ]
    }
}



var endlist = [Coordinate]()

endlist.append(Coordinate(lat: 47424212, lon: 8855883))

let jsonDict = endlist.map{ $0.toJSONDict() }

print(jsonDict)

if let jsonData = try? NSJSONSerialization.dataWithJSONObject(jsonDict, options: .PrettyPrinted) {
    if let jsonString = String(data: jsonData, encoding: NSUTF8StringEncoding) {
        print(jsonString)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM