Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> iOS

วิธี parse JSON object ใน iPhone/iOS


JSON ย่อมาจาก Javascript object notation โดยส่วนมากเมื่อจัดการกับ APIs หรือบริการอื่นๆ ข้อมูลจะคืนมาในรูปแบบ JSON และเราต้องแปลงเป็นรูปแบบภาษาที่ใช้งานได้และรองรับ

Foundation framework ของ iOS มีคลาส JSONSerialization สำหรับแปลง JSON เป็นรูปแบบที่รองรับ เช่น Dictionary, strings, Bool ฯลฯ

คลาส JSONSerialization มีเมธอด jsonObject(with:options:) ที่ parse json และคืนค่า Any เป็นผลลัพธ์ และ error หากข้อมูลไม่สามารถ parse ได้

// Example JSON: /* {    "age": 42.0,    "name": {       "firstName": "tut"    } } */

ลองดูด้วยตัวอย่างอีกตัว สมมติเราได้ข้อมูลจาก API call ตอนนี้เพื่อ parse ข้อมูลนี้ เราจะใช้ JSONSerialization.jsonObject(with:options:)

if let data = data, let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] { }

// ตอนนี้ json object ข้างต้นมีข้อมูลที่ได้รับเป็น dictionary ของ String และ Any หรือจะไปที่ else ของ if let block

// สมมติ json มี key "Student" และค่าที่เกี่ยวข้องคือ dictionary

guard let student = json["Student"] as? [String: Any] else { return }

นี่คือวิธีที่เราสามารถ parse json และได้ค่าจากมัน เราสามารถปรับปรุงเพิ่มเติมได้โดยใช้ models และ initializers มาลองดูตัวอย่างโดยสร้าง local json file และพยายาม parse มัน

มาสร้าง json file ด้วยข้อมูลต่อไปนี้และบันทึกเป็น exercises.json

{    "Warmup": {       "Exercises": [          {             "Name": "Neck Strech",             "images": [                "http:sdf.com",                "sdf",                "sdf",                "sdf"             ],           "time": 30          }       ]    } }

เราจะ parse local json นี้และพิมพ์ผลลัพธ์ด้วยโค้ดต่อไปนี้ -

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)    } }

เมื่อเรารันโค้ดนี้ ผลลัพธ์ที่ได้คือ

วิธี parse JSON object ใน iPhone/iOS