Swift 4:解析JSON时保持相同顺序

时间:2018-06-28 22:33:30

标签: json swift nsjsonserialization

我需要在我的应用中显示地址列表,同时保持与响应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 :(得分:0)

正如rmaddy在他们的评论中所说,您发布的JSON是一个字典。字典本质上是无序的,因此也无法保证您从后端获得的顺序。某些服务器实现可能给出一致的顺序,而某些则可能不一致。

如果要确定顺序,则需要将后端系统更改为使用数组而不是字典。

如果您无法控制客户端,但仍想保留JSON中键的顺序,则可能必须自己手动解析JSON,构建键数组,然后使用这些键来以此顺序从字典中获取项目。

答案 1 :(得分:0)

如果数据的顺序很重要,则应将其放入Array,而不是Dictionary(本质上是无顺序的,但具有其他人注意到的快速键访问)。请相应地更改您的后端,然后问另一个问题,如果它不起作用。