JSON数据提取并排序以进行有效搜索

时间:2018-08-29 03:36:04

标签: json swift dictionary

我想获取类似以下JSON格式的数据,并获取此人的附件列表中的内容,并能够按附件类型进行搜索,并使其返回具有附件的人员的列表。我是否想以某种方式使用Swift的 contains 内置函数,这样就不必构建for循环来进行搜索了?我是否必须创建为每种附件类型命名的新列表,并将用户名附加到这些列表?一个人怎么做?我真的不知道该如何处理。

[
  {
    "name": "John",  
    "Accessories":["watch","necklace"]
  },
  {
    "name": "James",
    "Accessories":["watch","ring"]
  }
]

1 个答案:

答案 0 :(得分:1)

您可以在Swift 4中使用Decodable协议。首先,您必须创建一个定义JSON对象的类

class MyNewClass: Decodable {
    //Make sure your variable names match the keys in your JSON response
    var name: String!
    var Accessories: [String]!
}

当您获得JSON响应时,使用以下几行将JSON数据解码为类对象数组,并根据搜索条件过滤该数组

do {
    let objects = try JSONDecoder().decode([MyNewClass].self, from: data)
    let people = obj.filter({ $0.Accessories.contains("WHATEVER") }).map{ $0.name }
    //Here you should have an array of people's name that have that accessory
} catch {error
    print(error)
}