2016-09-15 33 views
8

Tôi có một thời gian hiểu các nguyên tắc tuần tự hóa JSON đơn giản với Swift 3. Tôi có thể xin trợ giúp giải mã JSON từ một trang web thành một mảng để tôi có thể truy cập nó như là jsonResult["team1"]["a"] không? Đây là mã có liên quan:JSONSerialization với 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 đến là:

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

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

Cảm ơn

Trả lời

10

Trong Swift 3, kiểu trả về của JSONSerialization.jsonObject(with:options:) đã trở thành Any.

(Bạn có thể kiểm tra xem nó trong cửa sổ Trợ giúp nhanh của Xcode của bạn, với chỉ trên jsonResult.)

Và bạn không thể gọi bất kỳ phương pháp hay subscript cho biến gõ như Any. Bạn cần chuyển đổi loại rõ ràng để hoạt động với Any.

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

Và mặc định phần tử loại NSArray, loại Giá trị mặc định của NSDictionary cũng đã trở thành Any. (Tất cả những điều này được gọi đơn giản là "id-as-Any", SE-0116.)

Vì vậy, nếu bạn muốn đi sâu hơn vào cấu trúc JSON, bạn có thể cần một số chuyển đổi loại rõ ràng khác.

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

Cảm ơn bạn. Thông tin từ OOPer đã giúp. Nhưng, những gì thực sự đã giúp cải thiện json của tôi:

{ "teams": [ { "a": 1, "b": 2, "c": "red" }, { "a": 1, "b": 2, "c": "yellow" }, { "a": 1, "b": 2, "c": "green" } ] }