Преобразование JSONArray в строковый массив с помощью SwiftyJSON

#json #swift2 #xcode7 #swifty-json

#json #swift2 #xcode7 #swifty-json

Вопрос:

Ну, я действительно новичок в Swift, и я использовал SwiftyJSON, чтобы упростить анализ данных JSON, поступающих из API.

У меня есть ответ данных, который выглядит следующим образом:

 [
   {
     "fname": < String value>
     "mname": < String value>
     "lname": < String value>
     "weights": [
          {
            "date": <String value>, 
            "weight": <String value> 
          },
          {
            "date": <String value>,
            "weight": <String value>
          }
]
  

Для моего способа синтаксического анализа SwiftyJSON, вот мой код

 let swiftyJSON = JSON(data: data!)
for item in swiftyJSON.arrayValue{
    self.firstName = item["fname"].stringValue
    self.middleName = item["mname"].stringValue
    self.lastName = item["lname"].stringValue
    //JSON Array "weights" code snippet below
}
  

Для имен я разобрал его в строку, но с "weights" . Я понятия не имею, как это сделать. Я пробовал это с помощью этого:

 for key in item["weights"]["weight"].arrayValue{
   self.allWeights.append(key.stringValue)
}
  

И это не работает. Может ли кто-нибудь помочь мне с этим? большое спасибо.

Комментарии:

1. Я использую, xcode 7.3 значит, это swift 2.2 правильно?

Ответ №1:

weights содержит массив словарей

 ...   
if let weights = item["weights"].array {
   for weightItem in weights {
     let date = weightItem["date"].stringValue
     let weight = weightItem["weight"].stringValue
     print(date, weight)
   }
 }
  

Комментарии:

1. Спасибо, сэр @vadian, я все еще не могу разобрать его в строковый массив, но с вашей помощью у меня уже есть словарь jsonarray. вот фрагмент кода image.prntscr.com/image/91e86ca71c474c28ae7b9199ecca65b0.png

2. и вот результат image.prntscr.com/image/cbed3c440f2e4d21871b4539dd137ab0.png я напечатал weights , и он получил jsonarray. Но в следующих строках это не было проанализировано. Большое вам спасибо!

Ответ №2:

Это может быть немного более быстрым ответом. Что мы здесь делаем, так это перебираем массив json с помощью map и возвращаем объект dictionary для каждого элемента в массиве. Функция map, конечно, создаст свой собственный массив и добавит к нему каждый объект словаря, прежде чем вернуть весь массив, хранящийся в переменной weights. Возможно, мозг почти поджарился, поэтому, если я не совсем правильно понял, дайте мне знать.

 let swiftyJSON = JSON(data: data!)
let weights = swiftyJSON["weights"].arrayValue.map {["date": $0["date"].stringValue, "weights": $0["weights"].stringValue]}