JSON là viết tắt của ký hiệu đối tượng Javascript. Hầu hết khi xử lý các API hoặc bất kỳ dịch vụ nào khác, dữ liệu được trả về ở định dạng JSON và chúng tôi cần chuyển đổi dữ liệu đó sang các định dạng ngôn ngữ có thể sử dụng và hỗ trợ.
Khuôn khổ nền tảng của iOS cung cấp một lớp JSONSerialization để chuyển đổi JSON thành các định dạng được hỗ trợ như Từ điển, chuỗi, Bool, v.v.
Lớp JSONSerialization cung cấp một phương thức jsonObject (with:options :) phân tích cú pháp json và trả về kết quả là Bất kỳ và một lỗi nếu không thể phân tích cú pháp dữ liệu.
// Example JSON: /* { "age": 42.0, "name": { "firstName": “tut” } } */
Hãy xem điều này với sự trợ giúp của một ví dụ khác, giả sử chúng tôi nhận được dữ liệu từ lệnh gọi API của mình, bây giờ để phân tích cú pháp dữ liệu này, chúng tôi sẽ sử dụng JSONSerialization. jsonObject (với:tùy chọn :)
if let data = data, let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] { }
// Bây giờ đối tượng json ở trên chứa dữ liệu nhận được dưới dạng từ điển của Chuỗi và Bất kỳ, hoặc nó vượt ra khỏi khối if let to else
// giả sử json chứa khóa “Sinh viên” và giá trị được liên kết với khóa đó là từ điển
guard let student = json[“Student”] as? [String: Any] else { return }
Đây là cách chúng ta có thể phân tích cú pháp json và nhận giá trị từ nó. Chúng tôi có thể nâng cao hơn nữa điều này bằng cách sử dụng các mô hình và bộ khởi tạo. Hãy xem ví dụ về điều này bằng cách tạo tệp json cục bộ và sau đó cố gắng phân tích cú pháp.
Hãy tạo một tệp json với dữ liệu sau và lưu nó dưới dạng works.json
{ "Warmup": { "Exercises": [ { "Name": "Neck Strech", "images": [ "http:sdf.com", "sdf", "sdf", "sdf" ], "time": 30 } ] } }
Chúng tôi sẽ phân tích cú pháp json cục bộ này ngay bây giờ và in kết quả bằng mã sau -
if let filePath = Bundle.main.path(forResource: "exerciseData", ofType: "json") { do { let data = try Data(contentsOf: URL(fileURLWithPath: filePath), options: .mappedIfSafe) let jsonResult = try JSONSerialization.jsonObject(with: data, options: .mutableLeaves) if let exercises = jsonResult as? [String:AnyObject] { if let warmups = exercises["Warmup"] as? [String:AnyObject] { print(warmups) } } } catch { print(error.localizedDescription) } }
Khi chúng tôi chạy mã này, bên dưới là kết quả mà chúng tôi nhận được.