2017-01-26 18 views
4

私はそれがこのデータを読み取ることができませんでした[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\"}", 
} 

のように見えることをJSON文字列(値)を持つJSONデータを取得してきましたその後swiftyjson

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

使用jsonString私はコードの下にこれを辞書に、この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にされます右。そしてちょっとした提案:手作業で文字列を入力するのではなく、 "Value"の値を辞書に書き込んでください。 –

+0

私の前のコメントは不完全でした。末尾のカンマは間違いなく問題ですが、エスケープされていない改行も問題です。 – Moritz

答えて

4

あなたが正しいです、問題は "\ n"のために発生しました。私はあなたのコードを "\ n"を使わずに試してみました。

私は "\\ 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]) 
関連する問題