Извлечь данные из массива - PullRequest
0 голосов
/ 26 июня 2018
{
"valueSet": true,
"valueList": [
    {},
    {
        "conId": "003q000000jvwIrAAI"
    }
],
"httpCode": 200,
"errorSet": false,
"errorList": []
}

Это ответ, который я получаю с сервера.Но на самом деле я новичок в Swift, поэтому я не знаю, как получить значение этого «conId».Я делаю код ниже, чтобы получить valueList, но после этого, как получить это, я не понимаю, как получить этот "conId".Мне нужно отправить этот conId в виде строки в обратном вызове.

let parseResult: [String : AnyObject]
                do{
                    parseResult = try JSONSerialization.jsonObject(with: jsonData, options:.allowFragments) as! [String : AnyObject]
                    print("\(parseResult)")
                } catch {
                    print("Could not parse data as Json \(String(describing: data))")
                    return
                }

                if let valueSet = parseResult["valueSet"] {
                    let value  =  valueSet as! Bool
                    print("statusCode: \(httpResponse.statusCode)")
                    if let valueList = parseResult["valueList"] {
                        print(valueList)
                    if(httpResponse.statusCode == Constants.KNetworkSuccessCode) && (value == true) {
                        callback(httpResponse.statusCode, value, "")
                    }else {
                        callback(httpResponse.statusCode, value, "")
                    }
                    }
                }

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Ты рядом.Вам необходимо привести значение ValueList в виде массива словарей, подобных этому:

if let valueList = parseResult["valueList"] as? [[String: String]] {

Затем вы можете просто зациклить значение ValueList, чтобы найти то, что вам нужно, или напрямую получить к нему доступ с помощью valueList[1]["conId"].

* 1006.* Заметьте, я использую as? [[String: String]], чтобы убедиться, что valueList возвращен как правильный тип данных, иначе он будет равен нулю и завершится ошибкой if let.Я бы порекомендовал использовать as? для приведения вместо as!, чтобы вы могли таким образом отлавливать ошибки.
0 голосов
/ 26 июня 2018

Вы можете получить значение conId следующим образом ...

//get the "valueList" from response
if let valueList = obj["valueList"] as? [[String: Any]] {

  //get the conId from [String: Any]
  for item in valueList {

    if let conId = item["conId"] as? String {
        print(conId)
    }
  }
}
...