Swift3 - 字典到JSON字符串
我有下面的类(在实际Chat类是NSManagedObject,我简化它为清楚起见)Swift3 - 字典到JSON字符串
import Foundation
class Chat: Hashable {
public var id: Int32?
public var token: String?
public var title: String?
var hashValue: Int {
return ObjectIdentifier(self).hashValue
}
static func ==(lhs: Chat, rhs: Chat) -> Bool {
return ObjectIdentifier(lhs) == ObjectIdentifier(rhs)
}
}
在这里,我初始化对象并将其存储在一组(在实际此取数据时使用的核心数据和类型总是Set
。因此我试着复制同一类型)
let chat1 = Chat()
chat1.id = 1
chat1.token = "aU7nanPu"
chat1.title = "Chat Title 1"
let chat2 = Chat()
chat2.id = 2
chat2.token = "948dfjh4"
chat2.title = "Chat Title 2"
let chat3 = Chat()
chat3.id = 3
chat3.token = "1321sjadb"
chat3.title = "Chat Title 3"
var chats = Set<Chat>()
chats.insert(chat1)
chats.insert(chat2)
chats.insert(chat3)
我现在想将数据转换成JSON将其发送到服务器进行处理。 (我使用Alamofire和SwiftyJSON),因此我首先使用下面的代码将它转换为Dictionary。
var resultDict = [Int:Any]()
for (index, chat) in chats.enumerated() {
var params = ["id" : chat.id!, "token": chat.token!, "title": chat.title!] as [String : Any]
resultDict[index] = params
}
这给了我下面的输出
[2: “ID”:3, “令牌”: “1321sjadb”, “称号”: “聊天标题3”],0: [“id”:1,“token”:“aU7nanPu”,“title”:“聊天标题1”],1:[“id”:2, “token”:“948dfjh4”,“title”标题2“]]
我现在要将此输出转换为JSON。这是我的尝试。
let jsonData = try! JSONSerialization.data(withJSONObject: resultDict, options: .prettyPrinted)
这给了我该说Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid (non-string) key in JSON dictionary
我的问题是错误的,我怎么转换resultDict
变量为有效的JSON字符串格式?
PS:在情况下,如果有人想用代码来打球,这里是小提琴:https://swift.sandbox.bluemix.net/#/repl/597833e605543472066ad11e
我相信resultDict需要它的关键是String类型。
let resultDict = [String:Any]()
只是索引转换为字符串将它添加到字典
resultDict[String(index)] = params
谢谢!当我改变它时工作。 –
你resultDict
之前[Int:Any]
型和JSONSerialization需要钥匙是strings
https://developer.apple.com/documentation/foundation/jsonserialization/1413636-data了解更多详情。
我怎么转换resultDict变量为有效的JSON字符串格式
试试这个
var resultDict = [String:Any]()
for (index, chat) in chats.enumerated() {
var params = ["id" : chat.id!, "token": chat.token!, "title": chat.title!] as [String : Any]
resultDict["\(index)"] = params
}
立即工作。谢谢 :-) –
的错误信息是一清二楚:非字符串字典的键不JSON不允许的。如果它应该发送到服务器,不要*漂亮地打印*字符串。服务器不关心美学。 – vadian