MKGeoJSONDecoder не может разобрать экранированные символы двойной кавычки - PullRequest
0 голосов
/ 20 апреля 2020

При синтаксическом анализе действительных данных 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.}

...