2017-01-26 4 views
4

I json Daten haben, die JSON-String (Wert) haben, dass diese aussehenDie Daten konnten nicht gelesen werden, weil es nicht im richtigen Format [swift 3]

{ 
    "Label" : "NY Home1", 
    "Value" : "{\"state\":\"NY\",\"city\":\"NY\",\"postalCode\":\"22002\",\"value\":\"Fifth Avenue1\nNY NY 22002\nUSA\",\"iosIdentifier\":\"71395A78-604F-47BE-BC3C-7F932263D397\",\"street\":\"Fifth Avenue1\",\"country\":\"USA\"}", 
} 

nehme ich die jsonString mit swiftyjson

let value = sub["Value"].string ?? "" 

Danach konvertiere ich diese jsonString mit diesem Code unten Wörterbuch, aber es zeigt immer diese Fehlermeldung The data couldn’t be read because it isn’t in the correct format

if let data = value.data(using: String.Encoding.utf8) { 
     do { 
      let a = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] 
      print("check \(a)") 
     } catch { 
      print("ERROR \(error.localizedDescription)") 
     } 
    } 

Ich denke, das passiert, weil "\ n", wie jsonstring in Wörterbuch konvertieren, die "\ n" haben?

+0

@EricAya ist Recht. Und nur ein kleiner Vorschlag: Schreiben Sie den Wert von "Value" in das Wörterbuch, anstatt manuell eine Zeichenfolge einzugeben. –

+0

Mein vorheriger Kommentar war unvollständig. Das abschließende Komma ist definitiv ein Problem, sicher - aber die Zeilenzeilen ohne Zeilenumbruch sind ebenfalls ein Problem. – Moritz

Antwort

4

Sie haben Recht, Problem aufgetreten wegen "\ n". Ich habe deinen Code ohne "\ n" ausprobiert und es funktioniert perfekt.

I "\ n" durch "\\ n" ersetzt und iOS scheint die Zeichenfolge zu konvertieren Wörterbuch:

let value = "{\"state\":\"NY\",\"city\":\"NY\",\"postalCode\":\"22002\",\"value\":\"Fifth Avenue1\nNY NY 22002\nUSA\",\"iosIdentifier\":\"71395A78-604F-47BE-BC3C-7F932263D397\",\"street\":\"Fifth Avenue1\",\"country\":\"USA\"}" 

if let data = value.replacingOccurrences(of: "\n", with: "\\n").data(using: String.Encoding.utf8) { 
    do { 
     let a = try JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? [String: Any] 
     NSLog("check \(a)") 
    } catch { 
     NSLog("ERROR \(error.localizedDescription)") 
    } 
} 

erhielt ich in meinem Log:

check Optional(["value": Fifth Avenue1 
NY NY 22002 
USA, "country": USA, "city": NY, "iosIdentifier": 71395A78-604F-47BE-BC3C-7F932263D397, "street": Fifth Avenue1, "postalCode": 22002, "state": NY]) 
Verwandte Themen