Анализировать данные JSON с помощью Swift, AlamoFire и SwiftyJSON - PullRequest
0 голосов
/ 01 июня 2018

Как новичок в Swift, я очень озадачен тем, как анализировать некоторые данные JSON, полученные из API.Я могу получить данные JSON из API, используя запрос alamofire.На данный момент, я думаю, у меня есть объект NSDictionary, JSON as print (JSON) регистрирует, чтобы поддерживать большую часть JSON.

if let result = response.result.value {
                            let JSON = result as! NSDictionary
                           print("this is what JSON is")
                            print(JSON)

Мой вопрос, во-первых, является ли JSON фактически NSDictionary.Во-вторых, как мне получить доступ к значению в JSON.Нужно ли сначала преобразовать это в объект данных.Или как мне получить вложенные данные.

Например, скажем, JSON выглядит так:

 {
   "contact": {
   "first": "Bob",
   "second":"Jones"
    }
 }

Я сталкивался с таким кодом на SO:

 let data = JSON(data: JSON)
 print("data\(data["contact"]["first"])")

Но выдает ошибку.У меня установлен swiftyJSON, но я рад решению с ним или без него.

Заранее благодарен за любые предложения

Ответы [ 3 ]

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

ПОПРОБУЙТЕ ЭТО!

     if let data = response.data {
            let jsonData = JSON(data: data)
            print("data : \(jsonData["contact"]["first"].string)")
        }
0 голосов
/ 02 июня 2018

Swift4 представляет удивительный протокол Codable.

Используя Codable, мы можем смоделировать файл JSONObject или PropertyList в эквивалентные структуры или классы, написав очень мало строк кода.

Доступно множество онлайн-инструментовкоторый создает класс модели из вас JSON (http://www.json4swift.com/)

Пример

  let decoder = JSONDecoder()
  let parsedObject = try decoder.decode(Class.self, from: data) 

Подробности можно найти по ссылке ниже: https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types

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

Можете ли вы попробовать

if let result = response.result.value as? [String:Any] {
   if let contact = result["contact"] as? [String:Any] {
      if let first = contact["first"] as?  String {
           print(first)
     }
   }
}

, также этот

let data = JSON(data: JSON)

выдает ошибку, поскольку параметр должен иметь тип Data, а не Dictionary

Я бы предпочелвернуть данные из Alamofire запроса и использовать Decodable для его анализа и преобразования в требуемую модель

...