使用 Alamofire/SwiftyJSON 获取 JSON 数组的第一个元素

Posted

技术标签:

【中文标题】使用 Alamofire/SwiftyJSON 获取 JSON 数组的第一个元素【英文标题】:Getting first element of a JSON Array with Alamofire/SwiftyJSON 【发布时间】:2017-06-09 14:29:48 【问题描述】:

我有一个 Alamofire 请求,结果给了我 JSON。这是我的 JSON:

"user" : 
    "field_first_name" : 
      "und" : [
        
          "value" : "Christopher",
          "format" : null,
          "safe_value" : "Christopher"
        
     ]
    ,

“und”值是一个数组,通常只有一个值。我想一直抓取这个数组的第一个元素,因为偶尔这个字段会有多个元素,但第一个总是正确的结果。

下面的代码有效,直到我到达“.first”。这将返回一个 (String, JSON) 类型的值,我无法弄清楚如何将该项目“firstValue”恢复为可用格式。每当我尝试使用

Alamofire.request(url, method: .post, parameters:parameters, headers: headers)
    .responseJSON  response in

            if let data = response.result.value 
                let json = JSON(json: data)


                let firstValue = json["user"]["field_first_name"]["und"].first
                print(firstValue!)
            
        

firstValue 然后变成 (String, JSON) 类型,我不知道如何处理。我想得到的是“firstValue”中键“value”的值。

这是“firstValue”打印出来的:

("0", 
    "safe_value" : "Christopher",
    "value" : "Christopher",
    "format" : null
)

这种方法可以挽救吗?我可以做一个 for in 循环,得到第一个结果,然后告诉它忽略其余的,但这似乎不对。感谢您的帮助。

【问题讨论】:

试试this answer,而不是先使用数组,然后再让我知道它是否有效 我找到了解决方案:firstValue 是一个元组,类型为 (String, JSON),我只需要元组的第二部分。所以,如果我做 print(firstValue.1["value"]) 它的工作原理 【参考方案1】:

我相信你应该能够做这样的事情

   if let firstValue = json["user"]["field_first_name"]["und"].first?.1 
      print(firstValue)
   

【讨论】:

【参考方案2】:

我知道这已经晚了一年多,但这应该适用于您的特定数据。这是相当长的代码行。我会分解它以使其更具可读性。

if let firstValue = json["user"]["field_first_name"] ["und"].arrayValue[0]["value"].string 
    print(firstValue)

【讨论】:

以上是关于使用 Alamofire/SwiftyJSON 获取 JSON 数组的第一个元素的主要内容,如果未能解决你的问题,请参考以下文章

swift、Alamofire、SwiftyJSON:如何解析 arrayObject

数据未使用 Alamofire + SwiftyJSON 加载到 UITableView

使用 Alamofire + SwiftyJSON 获取 JSON 数组

使用 Alamofire/SwiftyJSON 获取 JSON 数组的第一个元素

没有这样的模块“Alamofire”、“SwiftyJson”、“UiKiT”

在 swift 4.0 中使用 Alamofire/SwiftyJSON 时出错