При синтаксическом анализе действительных данных Geo JSON , содержащих экранированные двойные кавычки, MKGeoJSONDecoder завершается ошибкой.
Шаги для воспроизведения:
Запустите следующий блок кода на детской площадке .swift.
import Foundation
import MapKit
//Valid data verifed using http://geojson.io
if let data = """
{
"features": [
{
"geometry": {
"coordinates": [
13.38678,
52.52548
],
"type": "Point"
},
"properties": {
"description": " \" text in double quotes \" ",
"href": "/sen/web/service/liefer-und-abholdienste/index.php/detail/1848",
"id": "/sen/web/service/liefer-und-abholdienste/index.php/detail/1848",
"title": "1848"
},
"type": "Feature"
}
],
"type": "FeatureCollection"
}
""".data(using: .utf8) {
let decoder = MKGeoJSONDecoder()
do {
let decoded = try decoder.decode(data)
if let firstFeature = decoded.first as? MKGeoJSONFeature,
let firstCoordinate = firstFeature.geometry.first?.coordinate {
print("Latitude: \(firstCoordinate.latitude) Longitude : \(firstCoordinate.longitude)")
}
} catch (let error) {
print(error)
}
}
Блок catch сообщит об ошибке со словами: «Данные не могут быть прочитаны, поскольку они имеют неправильный формат».
Если мы изменим строку «description» и удалим экранированные двойные кавычки “\
, MKGeoJSONDecoder декодирует данные без проблем.
Редактировать: После удаления localisedDescription отображается следующая ошибка:
Error Domain=NSCocoaErrorDomain Code=3840
"Badly formed object around character 325."
UserInfo={NSDebugDescription=Badly formed object around character 325.}