Swift 2.0 对象数组到 JSON 字符串
Posted
技术标签:
【中文标题】Swift 2.0 对象数组到 JSON 字符串【英文标题】:Swift 2.0 Array of object to JSON string 【发布时间】:2015-10-22 07:13:01 【问题描述】:这是我的课:
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
]
谢谢!
【问题讨论】:
【参考方案1】:您不能使用 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)
【讨论】:
以上是关于Swift 2.0 对象数组到 JSON 字符串的主要内容,如果未能解决你的问题,请参考以下文章
Swift 2.0 + Alamofire 3.0 - 缓慢加载 JSON
Swift 2 到 Swift 3 迁移:对成员“下标”的模糊引用