Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> IOS

จะแยกวิเคราะห์วัตถุ JSON ใน iPhone / iOS ได้อย่างไร


JSON ย่อมาจากสัญกรณ์วัตถุ Javascript ส่วนใหญ่เมื่อต้องจัดการกับ API หรือบริการอื่นๆ ข้อมูลจะถูกส่งคืนในรูปแบบ JSON และเราจำเป็นต้องแปลงเป็นรูปแบบภาษาที่ใช้งานได้และรองรับ

เฟรมเวิร์กพื้นฐานของ iOS มีคลาส JSONSerialization เพื่อแปลง JSON เป็นรูปแบบที่รองรับ เช่น พจนานุกรม สตริง บูล เป็นต้น

คลาส JSONSerialization จัดเตรียมวิธีการ jsonObject(with:options:) ที่แยกวิเคราะห์ json และส่งคืนผลลัพธ์ใด ๆ และเกิดข้อผิดพลาดหากไม่สามารถแยกวิเคราะห์ข้อมูลได้

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

มาดูสิ่งนี้ด้วยความช่วยเหลือจากอีกตัวอย่างหนึ่ง สมมติว่าเราได้รับข้อมูลจากการโทร API ของเรา ตอนนี้เพื่อแยกวิเคราะห์ข้อมูล เราจะใช้ JSONSerialization jsonObject(with:options:)

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

// ตอนนี้วัตถุ json ด้านบนมีข้อมูลที่ได้รับเป็นพจนานุกรมของ String และ Any หรือถ้าปล่อยให้บล็อกไปที่อื่น

// สมมติว่า json มีคีย์ “Student” และค่าที่เกี่ยวข้องกับสิ่งนั้นคือพจนานุกรม

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

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

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

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

เราจะแยกวิเคราะห์ 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)
   }
}

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

จะแยกวิเคราะห์วัตถุ JSON ใน iPhone / iOS ได้อย่างไร