このような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」を持つ辞書に変換する方法が原因だと思います。
そうです、「\ 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])