简体   繁体   English

Swift2-在嵌套JSON中使用Alamofire 3

[英]Swift2 - Using Alamofire 3 in nested JSON

I have the following JSON: 我有以下JSON:

{
  "_embedded": {
    "modifier_groups": [
      {
        "_embedded": {
          "options": [
            {
              "id": "8kT9KTX7",
              "name": "Perfect",
              "open": false,
              "pos_id": "8kT9KTX7",
              "price_per_unit": 0
            },
            {
              "id": "zRcEkcj8",
              "name": "Overcooked",
              "open": false,
              "pos_id": "zRcEkcj8",
              "price_per_unit": 0
            }
          ]
        },
        "id": "eMiy4iR4",
        "maximum": 1,
        "minimum": 1,
        "name": "Temperature",
        "required": false
      },
      {
        "_embedded": {
          "options": [
            {
              "id": "E5cpac84",
              "name": "Tomato",
              "open": false,
              "pos_id": "E5cpac84",
              "price_per_unit": 0
            },
            {
              "id": "GkiREiyL",
              "name": "Cheese",
              "open": false,
              "pos_id": "GkiREiyL",
              "price_per_unit": 100
            }
          ]
        },
        "id": "kMT85Tay",
        "maximum": null,
        "minimum": 1,
        "name": "Toppings",
        "required": false
      }
    ]
  },
  "count": 2,
  "limit": 20
}

So there are modifier group names (eg "Temperature" and "Toppings"), and group options (eg "Perfect" and "Overcooked" for "Temperature" group). 因此,有修饰符组名称(例如“温度”和“浇头”)和组选项(例如“温度”组的“完美”和“煮熟”)。

What I am trying to do is build a [String] such as: 我想做的是构建一个[String]例如:

["Temperature - Perfect", "Temperature - Overcooked", "Toppings - Tomato", "Toppings - Cheese"]

What would be the quickest way to go about that? 最快的方法是什么?

Currently, I first extract the groups into a [String] using valueForKeyPath : 当前,我首先使用valueForKeyPath将组提取到[String]中:

Alamofire.request(.GET, url, headers: headers, encoding: .JSON)
        .responseJSON { response in
            switch response.result {
                case .Success(let JSON):                        
                    let jsonData = JSON as? NSDictionary
                    let groupNames = jsonData?.valueForKeyPath("_embedded.modifier_groups.name")

But how would I get from there to drilling deeper into the group options so that I append them into the [String] ? 但是,如何从那里深入研究组选项,以便将它们附加到[String]

UPDATE UPDATE

I tried this but it's not returning anything: 我试过了,但没有返回任何内容:

var mods = [String]()

let modGroups = jsonData?.valueForKeyPath("_embedded.modifier_groups")

if let modGroups = modGroups {
    for modGroup in modGroups as! [AnyObject] {
        let groupOptions = modGroups.valueForKeyPath("_embedded.options")
        if let groupOptions = groupOptions {
            for groupOption in groupOptions as! [AnyObject] {
                mods.append("\(modGroup) - \(groupOption)")
            }
        }
    }
}

Got it: 得到它了:

var mods = [String]()

let modGroups = jsonData?.valueForKeyPath("_embedded.modifier_groups") as? [NSDictionary]

if let modGroups = modGroups {
    for modGroup in modGroups {
        let groupOptions = modGroup.valueForKeyPath("_embedded.options") as? [NSDictionary]
        if let groupOptions = groupOptions {
            for groupOption in groupOptions {
                mods.append("\(modGroup.valueForKey("name")!) - \(groupOption.valueForKey("name")!)")
            }
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM