私は実際、この内の次のクラス(実際のチャットのクラスでは、私は明確にするためにそれを単純化し、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にデータを変換したいです。 (私はSwiftyJSONでAlamofireを使用しています)ので、まず次のコードを使用してDictionaryに変換しました。 [ "ID"::3、 "トークン": "1321sjadb"、 "タイトル": "チャットタイトル3"]、0:
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":1、 "token": "aU7nanPu"、 "title": "チャットタイトル1"]、1:["id":2、 "token": "948dfjh4"、 "title": "チャットタイトル2 "]]
この出力をJSONに変換します。ここで私が試したものです。
let jsonData = try! JSONSerialization.data(withJSONObject: resultDict, options: .prettyPrinted)
これは私に私の質問は、私は有効なJSON文字列形式にresultDict
変数を変換しないか、であるTerminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid (non-string) key in JSON dictionary
を言うエラーが発生しますか?
PS:誰かがコードでプレイしたい場合には、場合、ここでのフィドルは次のとおりです。https://swift.sandbox.bluemix.net/#/repl/597833e605543472066ad11e
をお試しください:非文字列の辞書のキーはJSONでは許可されません。サーバーに送信されるはずの文字列を*印字しないでください。サーバーは美学を気にしません。 – vadian