webentwicklung-frage-antwort-db.com.de

Die Daten konnten nicht gelesen werden, da sie nicht im richtigen Format vorliegen [Swift 3]

Ich habe JSON-Daten, die JSON-Zeichenfolge (Wert) haben, die so aussehen

{
     "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\"}",
}

Ich nehme den jsonString mit swiftyjson

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

Danach konvertiere ich diesen jsonString nach Dictionary mit dem folgenden Code, aber es wird immer diese Fehlermeldung angezeigt 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 man jsonstring in ein Wörterbuch konvertiert, das "\ n" hat?

12
Aldo Lazuardi

Sie haben Recht, das Problem ist aufgrund von "\ n" aufgetreten. Ich habe Ihren Code ohne "\ n" ausprobiert und er funktioniert einwandfrei.

Ich habe "\ n" durch "\\ n" ersetzt und iOS scheint die Zeichenfolge in ein Wörterbuch zu konvertieren:

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)")
    }
}

Ich habe dies in meinem Log erhalten:

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])
8
EPerrin95