2016-10-13 3 views
0

Ich habe dieses Beispiel:Swift 3 - ungültiges JSON-Objekt von [[String: Alles]]

var commands = [[String: Any]]() 

Nach einigen Berechnungen, ihr Ergebnis ist:

[["command": 50022, "homes": [["gateways": [["mac": "845DD74B405E", "services": [["iid": 9, "name": "Some name"]], "aid": 1]], "name": "H1"]]], ["command": 50025, "services": [["mac": "845DD74B405E", "iid": 9, "aid": 1, "new_name": "Some name"]]]] 

ich es konvertieren möge (commands) zu JSON mit SwiftyJSON:

let json = JSON(commands) 
print(json) // "unknown" 

aber das Ergebnis ist immer unknown.

Dann überprüfe ich die Gültigkeit von commands, um sicherzustellen, dass es JSON-konvertierbar ist. Aber ich habe false mit JSONSerialization.isValidJSONObject(commands), was unerwartet ist!

Haben Sie irgendwelche Ideen, warum commands (Array von Dictionary) ist kein gültiges JSON Objekt?

Dank

+1

Ihr Array ist gültig. – vadian

+0

Ich stimme dir zu, dass das Array gültig ist (ich habe es mit 'print (type (of: commands))' -> array) verifiziert. Aber was mich verwirrt, ist: Wenn es gültig ist, wie kommt es dann, dass es kein gültiges JSON-Objekt ist? – quanguyen

+0

Es ist auch ein gültiges JSON-Objekt. Ich habe es auf einem Spielplatz bewiesen. – vadian

Antwort

0

Das Problem in meinem commands ist in den ganzen Zahlen, 50022 und 50025. In meinem Code sind sie in einem enum von UInt32 definiert. Und wenn ich sie auf einen Spielplatz kopiere, um sie zu verifizieren, konvertiert Swift sie in Int. Deshalb gelingt mir das immer auf dem Spielplatz.

Zurück zu meinem Code erwartet Swift 3, dass eine Nummer Int ist, um sie erfolgreich in ein JSON-Objekt zu konvertieren. Swift 2 hat dieses Verhalten nicht.

Also, nachdem ich meine enum definieren von UInt32 zu Int ändern, funktioniert es einfach schön!

Danke an alle.