Нераспознанные строки при разборе во вложенном Json в Swift - PullRequest
0 голосов
/ 26 июня 2018

Я не смог найти никакого решения, чтобы избавиться от некоторой информации в данных json, от которой я хочу избавиться, или мне нужно обобщить эту строку, которая не влияет на мой код при разборе. чтобы быть понятным, мой пример кода

{
"0xfc255":{
    "Eczane":"Nural",
    "Eczaci":"MEHMET AYDO\u011eAN",
    "Adres":"Haymana Yolu Caddesi No:86\/A Kar\u015f\u0131yaka",
    "Tarif":"",
    "Telefon":"3124841594",
    "Telefon2":null,
    "Lat":"39.801085082411184",
    "Lng":"32.79844880104065",
    "Sehir":"Ankara",
    "Ilce":"G\u00f6lba\u015f\u0131",
    "Mkk":"Kar\u015f\u0131yaka Mahallesi"
},
"0xfd9a6":{
    "Eczane":"Ta\u015fanlar",
    "Eczaci":"SAL\u0130H U\u011eUR TA\u015eANLAR",
    "Adres":"Atat\u00fcrk Mahallesi  Caddesi No:36\/C",
    "Tarif":"",
    "Telefon":"3122691661",
    "Telefon2":null,
    "Lat":"39.963343555855204",
    "Lng":"32.57991850376129",
    "Sehir":"Ankara",
    "Ilce":"Sincan",
    "Mkk":"Atat\u00fcrk Mahallesi"
},}

Как вы можете видеть, словарные имена не совпадают, и я хочу создать переменные типа let adress = json["0xfd9a6"]["Adres"], чтобы я мог использовать информацию. Я хочу узнать, как избавиться от 0xfd9a6 строки и проанализировать другие переменные в данных JSON.

мой код прост

  override func viewDidLoad() {
    super.viewDidLoad()

    let html = sayfayiGetir(url: "https://......./nobetci-eczaneler.html?json=")

    let json = JSON(parseJSON: html)
    parse(json: json)

    let adress = json["0xfd9a6"]["Adres"]
}

решаемые

Наконец-то я нашел решение с помощью SwiftyJSON. Вот код, который я ищу некоторое время:

func getJson(){

    guard let url = URL(string: "https://.........nobetci-eczaneler.html?json=") else {return}

    URLSession.shared.dataTask(with: url) { (data, response, err) in
        guard let data = data else {return}
        do{

            let json = try JSON(data: data)
            for (key,subJson):(String, JSON) in json {
                // Do something you want
                print(subJson["Eczane"])
            }

        }catch let jsonErr{
            print(jsonErr)
        }
    }.resume()
    }

1 Ответ

0 голосов
/ 26 июня 2018

JSON, который вы разместили, содержит словарь словарей. Словарь не может использоваться в качестве источника данных для табличного представления, поскольку словари не упорядочены, а табличное представление требует, чтобы модель имела определенный порядок.

Вы можете сопоставить свою структуру с массивом словарей, но вам нужно будет решить, какой порядок использовать и что делать с ключами для внешних словарей. Может быть, отсортировать внутренние словари, используя ключ из внешнего словаря?

Если у вас есть словарь словарей, и вы вместо этого хотите получить массив внешних словарей, вы можете просто отобразить только значения, как в комментарии Ларме. Однако порядок значений в результирующем массиве будет неопределенным.

Я предлагаю использовать такой код:

let sorted = json.map { $0 } //Map to an array of (key, value) tuples
    .sorted { $0.key < $1.key } //sort the array of tuples by key (the key)
    .map { $0.value } //map the tuples to an array of just the values
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...