web-dev-qa-db-fra.com

Les données n'ont pas pu être lues car elles ne sont pas au bon format [Swift 3]

J'ai des données json qui ont une chaîne json (valeur) qui ressemble à ceci

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

Je prends le jsonString en utilisant swiftyjson

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

Après cela, je convertis ce jsonString en dictionnaire avec ce code ci-dessous, mais il affiche toujours ce message d'erreur 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)")
        }
    }

Je pense que cela se produit parce que "\ n", comment convertir jsonstring en dictionnaire qui a "\ n"?

12
Aldo Lazuardi

Vous avez raison, un problème est survenu à cause de "\ n". J'ai essayé votre code sans "\ n" et il fonctionne parfaitement.

J'ai remplacé "\ n" par "\\ n" et iOS semble convertir la chaîne en dictionnaire:

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

J'ai obtenu ceci dans mon journal:

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