2017-01-26 6 views
4

Я JSon данные, которые имеют JSon строку (значение), что, которые выглядят как этотДанные не могут быть считаны, потому что это не в правильном формате [скор 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\"}", 
} 

Я беру jsonString использованием swiftyjson

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

После этого я преобразовать этот jsonString словарю с этим ниже код, но он всегда показывать это сообщение об ошибке 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)") 
     } 
    } 

Я думаю, что это происходит потому, что «\ n», как преобразовать jsonstring в словарь, который имеет «\ n»?

+0

@EricAya является правильно. И просто небольшое предложение: записать значение «Значение» в словарь вместо ручной ввода строки. –

+0

Мой предыдущий комментарий был неполным. Задняя запятая определенно является проблемой, конечно же, но проблема с неэкранированными линиями также является проблемой. – Moritz

ответ

4

Вы правы, проблема возникла из-за "\ n". Я пробовал ваш код без «\ n», и он отлично работает.

я заменил "\ п" на "\\ п", и IOS кажется, чтобы преобразовать строку в словарь:

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

Я получил это в моем журнале:

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