2016-09-15 2 views
8

У меня есть понимание времени простых принципов JSON-сериализации с Swift 3. Могу ли я получить некоторую помощь в расшифровке JSON с веб-сайта в массив, чтобы я мог получить к нему доступ как jsonResult["team1"]["a"] и т. Д.? Вот соответствующий код:JSONSerialization with Swift 3

let httprequest = URLSession.shared.dataTask(with: myurl){ (data, response, error) in 

self.label.text = "RESULT" 

    if error != nil { 

     print(error) 

    } else { 

     if let urlContent = data { 

      do { 

       let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: 
        JSONSerialization.ReadingOptions.mutableContainers) 

       print(jsonResult) //this part works fine 

       print(jsonResult["team1"]) 

       } catch { 

        print("JSON Processing Failed") 
       } 
      } 
     } 
    } 
    httprequest.resume() 

входящий JSON является:

{ 
team1 = { 
    a = 1; 
    b = 2; 
    c = red; 
}; 

team2 = { 
    a = 1; 
    b = 2; 
    c = yellow; 
}; 
team3 = { 
    a = 1; 
    b = 2; 
    c = green; 
}; 
} 

Благодаря

ответ

10

В Swift 3, возвращаемый тип JSONSerialization.jsonObject(with:options:) стал Any.

(Вы можете проверить это в быстрой помощи панели вашего Xcode, с указанием на jsonResult.)

И вы не можете вызывать любые методы или индексы для переменной, введенной как Any. Для работы с Any требуется явно преобразование типов.

if let jsonResult = jsonResult as? [String: Any] { 
     print(jsonResult["team1"]) 
    } 

И по умолчанию типа Элемент NSArray, введите значение по умолчанию NSDictionary также стал Any. (Все эти вещи просто называются «id-as-Any», SE-0116.)

Итак, если вы хотите углубиться в структуру JSON, вам может понадобиться другое явное преобразование типов.

 if let team1 = jsonResult["team1"] as? [String: Any] { 
      print(team1["a"]) 
      print(team1["b"]) 
      print(team1["c"]) 
     } 
0

Спасибо. Информация от OOPer помогла. Но что действительно помогло переформатировать мой json:

{ "teams": [ { "a": 1, "b": 2, "c": "red" }, { "a": 1, "b": 2, "c": "yellow" }, { "a": 1, "b": 2, "c": "green" } ] } 
Смежные вопросы