web-dev-qa-db-ja.com

データが正しい形式ではないため、データを読み取ることができませんでした[Swift 3]

このようなJSON文字列(値)を持つJSONデータがあります

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

Swiftyjsonを使用してjsonStringを取得します

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」を持つ辞書に変換する方法が原因だと思います。

12
Aldo Lazuardi

そうです、「\ 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])
8
EPerrin95