2017-02-12 2 views
1

ist da sagen wir mal, ein JSON-String ich vom Server erhielt: "\" 3 \ "" (mit Anführungszeichen, dh Länge == 3 hier)Konvertieren einfacher String zu JSON und in Swift zurück

In Android -Welt, kann ich tun:

gson.fromJson(json, new TypeToken<String>() {}.getType()); - es gibt "3" (dh Länge == 1)

In C# -Welt kann NewtonSoft.Json verwenden:

JsonConvert.DeserializeObject<string>(json, settings) - es gibt "3" (d.h. Länge == 1)

Und andersherum, ich habe Zeichenfolge, die ich als JSON serialisieren möchte. In Android würde ich gson.toJson("\"3\"") tun und in C# - JsonConvert.SerializeObject("\"3\"")

Das Problem mit jsonSerialization ist, dass es nicht einfacher String als gültige JSON nicht behandeln: JSONSerialization.isValidJSONObject("\"3\"") == *false*

Was in Swift/Obj- entsprechen würde C Welt?

Die hässliche Abhilfe I (mit Ausnahme von nur Hinzufügen/Entfernen von Anführungszeichen) bisher gefunden habe ist Zeichenfolge in 1-Punkt-Array wickeln JSONSerialization glücklich und dann entfernen „[“, „]“ aus zu machen resultierte JSON-String (und andersherum - fügen Sie "[", "]" vor der Deserialisierung) hinzu, aber es ist eine viel zu widerliche Art, die wirkliche Lösung für dieses Problem zu sein.

Antwort

2

Wenn JSON De-Serialisierung, die kein Array oder Wörterbuch als Top-Level-Objekt hat können Sie die .allowFragments Option übergeben:

let jsonString = "\"3\"" 
let jsonData = jsonString.data(using: .utf8)! 

let json = try! JSONSerialization.jsonObject(with: jsonData, options: .allowFragments) 

if let str = json as? String { 
    print(str) // 3 
} 

Allerdings scheint es keine Möglichkeit zu serialize zu sein eine einfache Zeichenfolge zu JSON mit der Klasse JSONSerialization aus der Foundation-Bibliothek.

anzumerken, dass nach der JSON specification, ein JSON-Objekt ist eine Sammlung von Name/Wert-Paare (Wörterbuch) oder einer geordneten Liste von Werten (Array). Eine einzelne Zeichenfolge ist kein gültiges JSON-Objekt.

Verwandte Themen