البرمجة

Understanding JSONSerialization Options

عند استخدام JSONSerialization في مشروعك، فإنك تتعامل بشكل أساسي مع تحليل بيانات JSON وتحويلها إلى كائنات Swift قابلة للاستخدام. ومن أجل تحديد سلوك عملية التحليل، يمكنك استخدام الخيارات options المتوفرة. الخيارات التي يمكنك استخدامها هي NSJSONReadingMutableContainers، NSJSONReadingMutableLeaves، وNSJSONReadingAllowFragments. دعنا نتعمق في كل منها ونفهم كيف تؤثر على النتيجة النهائية.

  1. NSJSONReadingMutableContainers:
    عند تمكين هذا الخيار، يتم إنشاء الأرقام والقواميس ككائنات قابلة للتعديل في Swift. بمعنى آخر، يمكنك تغيير القيم داخل القواميس والمصفوفات بعد تحليلها. هذا مفيد إذا كنت ترغب في تعديل البيانات المستلمة من JSON بعد تحليلها، بدلاً من إنشاء نسخ غير قابلة للتعديل منها.

  2. NSJSONReadingMutableLeaves:
    عند تمكين هذا الخيار، يتم إنشاء السلاسل النصية الفرعية في بيانات JSON كمثيلات من NSMutableString بدلاً من NSString. هذا يسمح بتغيير محتوى السلاسل النصية، مما يعني أنه بإمكانك تعديل النصوص المحددة داخل البيانات المحللة بدون إعادة إنشاء السلاسل بالكامل.

  3. NSJSONReadingAllowFragments:
    عند تمكين هذا الخيار، يسمح المحلل بتحليل top-level objects التي ليست بالضرورة مصفوفة NSArray أو قاموس NSDictionary. بمعنى آخر، يمكن للمحلل التعامل مع بيانات JSON الغير قياسية التي لا تكون عبارة عن مصفوفة أو قاموس، مثل السلاسل النصية أو القيم الفردية.

لفهم ذلك بشكل أفضل، دعنا نستعرض بعض الأمثلة على استخدام هذه الخيارات:

swift
// Example JSON data let jsonData = """ { "name": "John", "age": 30, "isStudent": true, "grades": [80, 85, 90], "address": { "city": "New York", "zipCode": "10001" } } """.data(using: .utf8)! // Parsing JSON with NSJSONReadingMutableContainers option if let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) as? [String: Any] { var mutableJsonObject = jsonObject mutableJsonObject["name"] = "Michael" // Changing the value of "name" key print(mutableJsonObject) } // Parsing JSON with NSJSONReadingMutableLeaves option if let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: .mutableLeaves) as? [String: Any] { if let address = jsonObject["address"] as? [String: Any], var city = address["city"] as? NSMutableString { city.append(" City") print(city) } } // Parsing JSON with NSJSONReadingAllowFragments option let jsonString = "\"Hello, World!\"" if let jsonFragment = try JSONSerialization.jsonObject(with: jsonString.data(using: .utf8)!, options: .allowFragments) as? String { print(jsonFragment) }

باستخدام هذه الأمثلة، يمكنك أن ترى كيف تؤثر الخيارات على عملية تحليل البيانات JSON وكيف يمكنك الاستفادة منها في مشروعك.

المزيد من المعلومات

بالطبع، دعنا نواصل توضيح الخيارات المتاحة مع JSONSerialization وكيفية تغيير jsonResult الناتج.

  1. NSJSONReadingMutableContainers:
    عند استخدام هذا الخيار، يُنشئ JSONSerialization الأرقام والقواميس ككائنات قابلة للتعديل في Swift. لنفترض أن لدينا بيانات JSON كالتالي:
json
{ "name": "Alice", "scores": [85, 90, 75] }

عند استخدام NSJSONReadingMutableContainers، يمكنك تغيير القيم داخل القواميس والمصفوفات بسهولة، كما في المثال التالي:

swift
if let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) as? [String: Any] { var mutableJsonObject = jsonObject mutableJsonObject["name"] = "Bob" // تغيير قيمة "name" if var scores = mutableJsonObject["scores"] as? [Int] { scores.append(80) // إضافة درجة جديدة print(scores) // ستطبع: [85, 90, 75, 80] } }
  1. NSJSONReadingMutableLeaves:
    عند تمكين هذا الخيار، يتم إنشاء السلاسل النصية الفرعية في بيانات JSON كمثيلات من NSMutableString بدلاً من NSString. هذا يسمح بتغيير محتوى السلاسل النصية دون إعادة إنشائها بالكامل، كما يوضح المثال التالي:
swift
if let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: .mutableLeaves) as? [String: Any] { if var name = jsonObject["name"] as? NSMutableString { name.append(" Smith") // إضافة اللقب print(name) // ستطبع: Alice Smith } }
  1. NSJSONReadingAllowFragments:
    هذا الخيار يسمح للمحلل بتحليل top-level objects التي ليست بالضرورة مصفوفة NSArray أو قاموس NSDictionary. يمكن استخدامه عندما تكون البيانات JSON غير قياسية، كما في المثال التالي:
swift
let jsonString = "\"Hello, World!\"" if let jsonFragment = try JSONSerialization.jsonObject(with: jsonString.data(using: .utf8)!, options: .allowFragments) as? String { print(jsonFragment) // ستطبع: Hello, World! }

باستخدام هذه الأمثلة، يمكنك الآن فهم كيفية استخدام الخيارات المختلفة مع JSONSerialization وكيفية تأثيرها على jsonResult الناتج. يمكنك تطبيق هذه المفاهيم في مشروعك لتحقيق التحليل المطلوب لبيانات JSON بطريقة تناسب احتياجاتك الخاصة.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر