سؤال

أنا أستفيد جدًا من تحليل JSON في تطبيق أكتب. تم تنفيذ معظم ما قمت به بالفعل باستخدام مكتبة jsonobject المضمنة في Android (هل هي JSON-LIB؟).

يبدو أن JSONOBJECT ينشئ مثيلات من كل شيء على الإطلاق في سلسلة JSON ... حتى لو لم ينتهي بهم المطاف باستخدامها جميعًا.

يعمل تطبيقي حاليًا بشكل جيد ، حتى على G1.

سؤالي هو: هل تستفيد السرعة والذاكرة من استخدام محلل دفق مثل جاكسون يستحق كل المشاكل؟

بالمشكلة ، أعني هذا: بقدر ما أستطيع أن أقول ، هناك ثلاثة جوانب سلبية لاستخدام جاكسون بدلاً من المكتبة المدمجة:

  1. الاعتماد على مكتبة خارجية. هذا يجعل .apk أكبر في النهاية. ليست صفقة ضخمة.
  2. تطبيقك أكثر هشاشة. نظرًا لعدم إجراء عملية التحليل تلقائيًا ، فمن المعرضة للتغييرات في نص JSON الذي يتم تحليله (ربما أكون مخطئًا في هذا).
  3. كتابة رمز إلى تحليل JSON عبر محلل دفق هو قبيح ومملة.
هل كانت مفيدة؟

المحلول

أعتقد أنك أجبت إلى حد كبير على سؤالك. قون
باستخدام محلل JSON المدمج بنفسي ولم يبحث عن بديل.

تحرير: الآن أنا أستخدم غلافًا رفيعًا يعتمد على التعليقات التوضيحية من droidparts.

نصائح أخرى

أنا أيضًا أستخدم محلل JSON في معظم الحالات ، لكنني دخلت مؤخرًا في سيناريو لا يناسبه: بالنسبة لبعض طلبات خدمة الويب ، أتلقى مستندات JSON بأكثر من 1 ميغابايت. يتطلب تحميلها باستخدام محلل JSON البناء كميات هائلة من الذاكرة الرئيسية وأدى OutOfMemoryException عدة مرات. بالنسبة لهذه السيناريوهات ، فإن محلل الدفق هو الخيار الأفضل (على الرغم من أنه أكثر إزعاجًا في الاستخدام) ولا يوفر محلل JSON المدمج البث ، ولكن فقط نمط شبيه بـ DOM.

لأي شخص يبحث عن محلل JSON المتدفق لنظام Android ، يمكنني أن أوصي بشدة بالاستخدام جوجل GSON. لقد جربت Jackson Json في البداية وعملت بشكل جيد حتى حاولت إنشاء إصدار الإصدار من تطبيقي: أبلغ Proguard عن العديد من المشكلات وتحطمت تطبيق التشغيل مع غامضة NullPointerException في مُنشئ جاكسون ObjectMapper (على الرغم من أن كل شيء يعمل بشكل جيد في نسخة التصحيح). حتى بعد بضع ساعات من المحاولة ، لم أتمكن من إصلاح هذا. بعد ذلك تحولت إلى GSON ثم عمل كل شيء مثل السحر.

راجع للشغل: يبلغ حجم جرة GSON البث فقط 14 كيلو بايت فقط-لذلك لا شيء يقلقه حقًا.

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

لما يستحق ، لدى جاكسون أيضًا نموذج شجرة لائق بالإضافة إلى ربط البيانات الكامل. نموذج الشجرة أسرع بكثير من المحلل الافتراضي (التحليل هو 3x-5x أسرع على J2SE ، وربما بالمثل على منصات أخرى مثل Android ، ربما يكون نموذج الشجرة نفسه أكثر كفاءة أيضًا). أو: إذا كنت لا ترغب في التبعية إلى الجرة الثانية (هناك حاجة إلى Mapper لنموذج الشجرة وربط البيانات) ، فإن كتابة الشجرة الخاصة بك لتغطية حالات الاستخدام الخاصة بك أمر بسيط أيضًا. إما استخدام HashMap/ArrayList/Wrappers الأساسية ، أو لديك فصولك الخاصة إذا كنت تفضل ذلك. سيكون المنشئ 40 سطرًا من الكود.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top