如何使用 AlamoFire 搜索 JSON API 和解码数组

Posted

技术标签:

【中文标题】如何使用 AlamoFire 搜索 JSON API 和解码数组【英文标题】:How to search a JSON API and decode an array using AlamoFire 【发布时间】:2018-05-11 18:51:31 【问题描述】:

我正在搜索一个 JSON API,我需要解码其中的一个数组。我正在使用 AlamoFire。示例:当我输入字母“F”时,我只想显示“F”字样。我只想在数组“名称”中搜索。对此的任何帮助将不胜感激!

下面是我的代码:

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) 
    let url = "http://dummy.com/url"
    Alamofire.request(url).responseData  (dataResponse) in
        if let err = dataResponse.error 
            print("Failed to contact", err)
            return
        

        guard let data = dataResponse.data else  return 
        let dummyString = String(data: data, encoding: .utf8)
        print(dummyString ?? "")

        do 
             let searchResult = try JSONDecoder().decode(SearchResults.self, from: data)
            print("Result Count:", searchResult.id)

         catch let decodeError 
            print("Failed to decode:", decodeError)
        
    


struct SearchResults: Decodable 
    let id: String


我的 API 数组如下所示:

结果ID:“1”, 名称:“食物”, , 结果ID:“2”, 名称:“电影”,

【问题讨论】:

你得到的实际反应是什么? 【参考方案1】:

你的结果是在arrayformat所以你需要把你的model像这样:

let searchResult = try JSONDecoder().decode([SearchResults].self, from: data)

对于搜索,您可以应用过滤器:

let filteredArray = searchResult.filter(  $0.name.contains("f")  )

【讨论】:

谢谢!我们可以去聊天讨论更多吗? 是的,我们可以去 我们怎么去聊天 我觉得***上有聊天 你也可以在这里问【参考方案2】:

正如你所说,你的回应是:

[
  resultId: "1", name: "Food" , 
  resultId: "2", name: "Movies"
]

所以,你的结构是,

struct SearchResults: Decodable 
    let resultId: String
    let name: String

你将把它用作:

    do 
        let resultArray = try JSONDecoder().decode([SearchResults].self, from: data)
        print("Result Count:", searchResult.id)

     catch let decodeError 
        print("Failed to decode:", decodeError)
    

对于搜索,您应该使用filter,如:

    let searchString = "F"
    let filteredArray = resultArray.filter(  String($0.name.first!) == searchString  )

用于匹配第一个字符 = String($0.name.first!) == searchText

检查名称是否有搜索文本 = $0.name.contains(searchText)

总计:

    do 
        let searchResult = try JSONDecoder().decode([SearchResults].self, from: data)
        let filteredArray = resultArray.filter(  $0.name.contains(searchText)  )
     catch let decodeError 
        print("Failed to decode:", decodeError)
    

【讨论】:

谢谢。我想按我在键盘上单击的任何字母进行搜索。我怎样才能做到这一点?我以“F”为例 我们可以去聊天讨论这个吗?

以上是关于如何使用 AlamoFire 搜索 JSON API 和解码数组的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Alamofire 发布嵌套的 JSON?

Swift 搜索栏 - 使用 Alamofire 请求更新表格视图

如何使用 Alamofire 解析 json 数据?

Alamofire Swift HTTPPost 登录和 JSON 响应

使用 AlamoFire 获取数据以根据 UISearchBar 值填充 UITableView

如何使用 Alamofire 和 SwiftyJSON 访问嵌套的 JSON 值?