从 JSON 响应中创建一个数组
Make an array out of JSON response
我有以下响应来获取区域,但我需要一个带有分隔符的单独数组
{
"name" : "Abu Hail",
"city_id" : 1,
"pk" : 227,
"city" : "Dubai"
},
{
"name" : "Academic City",
"city_id" : 1,
"pk" : 184,
"city" : "Dubai"
},
{
"name" : "Al Barari",
"city_id" : 1,
"pk" : 185,
"city" : "Dubai"
},
{
"name" : "Al Barsha 1,2 & 3",
"city_id" : 1,
"pk" : 166,
"city" : "Dubai"
},
如何从下面的名称中创建一个数组
["Abu Hail", "Academic City", "Al Barari", "Al Barsha 1,2 & 3"]
以下是我获得上述响应的代码
func getAreas(){
let headers: HTTPHeaders = [
"Authorization": "Token \(token!)",
"Accept": "application/json"
]
AF.request("\(staging.url)/api/addresses/areas/", method: .get, encoding: URLEncoding(), headers: headers).responseJSON { (response:DataResponse<Any>) in
switch response.result {
case let .success(value):
let json = JSON(value)
print("Areas Array: \(json)")
最好创建可编码对象
// MARK: - AreaElement
struct AreaElement: Codable {
let name: String?
let cityID, pk: Int?
let city: String?
enum CodingKeys: String, CodingKey {
case name
case cityID = "city_id"
case pk, city
}
}
现在你可以像
一样使用JSONDecoder
直接解析
fileprivate func retrieve<T: Decodable>(data: Data, type: T.Type) -> T? {
let decoder = JSONDecoder()
do {
let model = try decoder.decode(type, from: data)
return model
} catch(let error) {
return nil
}
}
AF.request("\(staging.url)/api/addresses/areas/", method: .get, encoding: URLEncoding(), headers: headers).responseData { (response:DataResponse<Data>) in
if let data = response.data {
let models = self.retrieve(data: data, type: [Area].self)
// How you get name from model with one line
let names = models?.map {[=11=].name}
}
.......
希望对您有所帮助
使用以下方法创建数组:
if let array = array as? [[String : Any]] {
let namesArray = array.compactMap { [=10=]["name"] } as? [String]
}
我有以下响应来获取区域,但我需要一个带有分隔符的单独数组
{
"name" : "Abu Hail",
"city_id" : 1,
"pk" : 227,
"city" : "Dubai"
},
{
"name" : "Academic City",
"city_id" : 1,
"pk" : 184,
"city" : "Dubai"
},
{
"name" : "Al Barari",
"city_id" : 1,
"pk" : 185,
"city" : "Dubai"
},
{
"name" : "Al Barsha 1,2 & 3",
"city_id" : 1,
"pk" : 166,
"city" : "Dubai"
},
如何从下面的名称中创建一个数组
["Abu Hail", "Academic City", "Al Barari", "Al Barsha 1,2 & 3"]
以下是我获得上述响应的代码
func getAreas(){
let headers: HTTPHeaders = [
"Authorization": "Token \(token!)",
"Accept": "application/json"
]
AF.request("\(staging.url)/api/addresses/areas/", method: .get, encoding: URLEncoding(), headers: headers).responseJSON { (response:DataResponse<Any>) in
switch response.result {
case let .success(value):
let json = JSON(value)
print("Areas Array: \(json)")
最好创建可编码对象
// MARK: - AreaElement
struct AreaElement: Codable {
let name: String?
let cityID, pk: Int?
let city: String?
enum CodingKeys: String, CodingKey {
case name
case cityID = "city_id"
case pk, city
}
}
现在你可以像
一样使用JSONDecoder
直接解析
fileprivate func retrieve<T: Decodable>(data: Data, type: T.Type) -> T? {
let decoder = JSONDecoder()
do {
let model = try decoder.decode(type, from: data)
return model
} catch(let error) {
return nil
}
}
AF.request("\(staging.url)/api/addresses/areas/", method: .get, encoding: URLEncoding(), headers: headers).responseData { (response:DataResponse<Data>) in
if let data = response.data {
let models = self.retrieve(data: data, type: [Area].self)
// How you get name from model with one line
let names = models?.map {[=11=].name}
}
.......
希望对您有所帮助
使用以下方法创建数组:
if let array = array as? [[String : Any]] {
let namesArray = array.compactMap { [=10=]["name"] } as? [String]
}