Swift 4: соблюдение того же порядка при разборе JSON - PullRequest
0 голосов
/ 29 июня 2018

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

{
"addresses": {
    "e5fdb5ba-7afb-11e8-bead-43321d1a8905": {
        "contact": "Name1",
        "zipCode": "06100"
    },
    "1495b580-7afc-11e8-bead-9f4049791561": {
        "contact": "Name2",
        "zipCode": "06100"
    },
    "e5fdb5ba-7afb-11e8-bead-43321d1a8905": {
        "contact": "Name3",
        "zipCode": "06100"
    },
    "1495b580-7afc-11e8-bead-9f4049791561": {
        "contact": "Name4",
        "zipCode": "06100"
    }
  } 
}

Но когда я анализирую ответ, используя

JSONSerialization.jsonObject(with: data, options: [])

Порядок адресов перепутан. Есть ли способ сохранить тот же порядок, что и в JSON?

Ответы [ 2 ]

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

Если порядок ваших данных важен, вы должны поместить его в Array, а не Dictionary (который по своей природе не имеет порядка, но с быстрым доступом с ключом, как заметили другие). Пожалуйста, измените ваш бэкэнд соответственно и задайте другой вопрос, если он не работает.

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

как говорит rmaddy в своем комментарии, JSON, который вы разместили, является словарем. Словари изначально неупорядочены, поэтому порядок, который вы получаете от серверной части, также не гарантирован. Некоторые реализации сервера могут давать согласованный порядок, а некоторые - нет.

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

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

...