如何使用 Alamofire swift 3 从这个 JSON 中获取值

Posted

技术标签:

【中文标题】如何使用 Alamofire swift 3 从这个 JSON 中获取值【英文标题】:How to get values from this JSON using Alamofire swift 3 【发布时间】:2017-07-09 00:22:02 【问题描述】:

我正在尝试从此 JSON 中获取值。这是 JSON 的一部分,因为真正的 JSON 数据太长了。

"hits" : [ 
"recipe" : 
  "uri" : "http://www.edamam.com/ontologies/edamam.owl#recipe_bd8def1d09d8c308f659e6945f366271",
  "label" : "Pinchos de carne",
  "image" : "http://img.recetascomidas.com/recetas/640_480/pinchos-de-carne.jpg",
  "source" : "Recetal Comidas",
  "url" : "http://pinchos-de-carne.recetascomidas.com/",
  "shareAs" : "http://www.edamam.com/recipe/pinchos-de-carne-bd8def1d09d8c308f659e6945f366271/carne",
  "yield" : 6.0,
  "dietLabels" : [ "Low-Carb" ],
  "healthLabels" : [ "Dairy-Free", "Gluten-Free", "Egg-Free", "Peanut-Free", "Tree-Nut-Free", "Soy-Free", "Fish-Free", "Shellfish-Free" ],
  "cautions" : [ ],
  "ingredientLines" : [ "600 gr. de carne magra de cerdo", "2 cucharadas de pimentón dulce", "1 cucharada de pimentón picante", "1 cucharada de cúrcuma", "1 cucharada de sazonador especial para carnes", "3 cucharadas de perejil fresco bien picadito", "1/2 cucharada de comino", "Aceite de oliva", "3 patatas", "1 diente de ajo", "Pimienta negra", "Sal" ],
  "ingredients" : [ 
    "text" : "600 gr. de carne magra de cerdo",
    "quantity" : 600.0,
    "measure" : null,
    "food" : "carne magra cerdo",
    "weight" : 600.0
  , 
    "text" : "2 cucharadas de pimentón dulce",
    "quantity" : 2.0,
    "measure" : "tbsp",
    "food" : "pimenton dulce",
    "weight" : 13.6
  , 
    "text" : "1 cucharada de pimentón picante",
    "quantity" : 1.0,
    "measure" : "tbsp",
    "food" : "pimenton picante",
    "weight" : 6.8
  , 
    "text" : "1 cucharada de cúrcuma",
    "quantity" : 1.0,
    "measure" : "tbsp",
    "food" : "curcuma",
    "weight" : 6.8
  , 
    "text" : "1 cucharada de sazonador especial para carnes",
    "quantity" : 1.0,
    "measure" : "tbsp",
    "food" : "sazonador",
    "weight" : 2.7
  , 
    "text" : "3 cucharadas de perejil fresco bien picadito",
    "quantity" : 3.0,
    "measure" : "tbsp",
    "food" : "perejil fresco",
    "weight" : 11.4
  , 
    "text" : "1/2 cucharada de comino",
    "quantity" : 0.5,
    "measure" : "tbsp",
    "food" : "comino",
    "weight" : 3.0
  , 
    "text" : "Aceite de oliva",
    "quantity" : 2.0,
    "measure" : "tbsp",
    "food" : "aceite oliva",
    "weight" : 27.0
  , 
    "text" : "3 patatas",
    "quantity" : 3.0,
    "measure" : null,
    "food" : "patatas",
    "weight" : 195.0
  , 
    "text" : "1 diente de ajo",
    "quantity" : 1.0,
    "measure" : null,
    "food" : "ajo",
    "weight" : 3.0
  , 
    "text" : "Pimienta negra",
    "quantity" : 1.0,
    "measure" : "peppercorn",
    "food" : "pimienta negra",
    "weight" : 0.3
  , 
    "text" : "Sal",
    "quantity" : 0.0,
    "measure" : null,
    "food" : "sal",
    "weight" : 3.3346887
   ]

例如,我想获取“recipe”中的标签值。我在控制台中成功打印了所有 JSON,但我不知道如何获取配方值。

我希望你能帮助我。

这是我现在的代码。

let url: String = "https://test-es.edamam.com/search?q=pollo"
var arregloHits: NSMutableArray = []

override func viewDidLoad() 
    super.viewDidLoad()

    pruebaJson()


func pruebaJson()
    if ControladorService.conexionInternet()
        ControladorService.sharedInstance.callUrlWithCompletion(url: url, params: nil, completion:  (finished, response) in
            if finished
                let result = NSMutableArray(array: response["hits"] as! NSArray)

                self.arregloHits = result
                print(self.arregloHits)
            else
                print("Connection failed")
            
        , method: .get)
    else
        print("No Internet")
    

【问题讨论】:

这段代码能走多远?是否成功打印print(self.arregloHits) 的结果?您现在的问题是如何从hits 数组中获取每个配方? 【参考方案1】:

您的*** json 结构是一个字典。所以你需要把它解析成[String: Any]。那么你的hints级别就是一个JSON数组,所以需要解析成[Any]

这是一个例子。不要忘记处理展开

do
    let json = try JSONSerialization.jsonObject(with: yourJSONData, options: []) as? [String: Any]

    let hits = json?["hits"] as? [Any]
    dump(hits)
catch let error


【讨论】:

以上是关于如何使用 Alamofire swift 3 从这个 JSON 中获取值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Alamofire 5.0.0-beta.3 (Swift 5) 上传图片(多部分)

如何在 Swift 3 中使用 Alamofire 4 解析这个 json?

如何使用 Alamofire 在 Swift 3 中解析 JSON?

Alamofire 4 请求返回 NSArray,无法弄清楚如何在 Swift 3 中使用 SwiftyJSON 进行解析

如何使用 Alamofire 在 Xcode 8 Swift 3.0 中获取特定的 JSON?

如何使用序列化为数据的响应数据处理程序(通过 AlamoFire 的 Swift 3)