GSON (Github: https://github.com/google/gson) هي مكتبة فئة Java التي توفرها Google لرسم الخرائط بين كائنات Java و JSON Data. يمكنك تحويل سلسلة JSON إلى كائن Java ، أو العكس.
أهم الأشياء في GSON هي 2 Gsons و Gsonbuilders.
لدى GSON أكثر الطرق الأساسية (1) Tojson () لتحويل كائنات Java إلى JSON
(2) FromJson () يحول JSON إلى كائن Java
اكتب فصول الكيان:
الفئة العامة الناس {string name ؛ عمري اسم SetName ؛ السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } public int getage () {return Age ؛ } public void setage (int age) {this.age = age ؛ } public boolean getSetName () {return setName ؛ } public void setSetName (boolean setName) {this.setName = setName ؛ } Override public string toString () {return "name =" + name + "age =" + age + "setName =" + setName ؛ }}اكتب فئة الاختبار gsontest
استيراد com.google.gson.exclusionstrategy ؛ استيراد com.google.gson.fieldattributes ؛ استيراد com.google.gson.gson ؛ استيراد com.google.gson.gsonbuilder ؛/*** تحويل كائن Java إلى Json. */class public gsontest {public static void main (string [] args) {people p = new people () ؛ P.Setage (20) ؛ P.SetName ("الناس") ؛ P.SetSetName (صواب) ؛ gson gson = new gson () ؛ System.out.println (gson.tojson (p)) ؛ }}نتيجة الإخراج:
{"name": "People" ، "Age": 20 ، "SetName": True}هذه مجرد أسهل طريقة لاستخدام GSON. كيفية تنفيذها إذا كنا بحاجة إلى تحويل اسم السمة من نوع Bool Type ألا يتم تحويله عند تحويله إلى JSON؟
بعد البحث في حزمة GSON لفترة طويلة ، وجدت أن هناك واجهة ضمن حزمة com.google.gson: asscriationStrategy. على الرغم من أنني لا أعرف ما الذي يفعله ، بناءً على الاسم ، يمكن استنتاج أن هذه الواجهة تستخدم لتعيين استراتيجية الاستبعاد لتحويل GSON. لذلك راجعت هذه الواجهة على الموقع الرسمي http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html ووجدت أنه طالما تم تنفيذ هذه الواجهة أو ما يلفت عنه فئة التنفيذ ، فسيتم تحويله إلى gson ، عند تحويله إلى Json ، لذا فإن الرمز التالي هو:
استيراد com.google.gson.exclusionStrategy ؛ استيراد com.google.gson.fieldattributes ؛ استيراد com.google.gson.gson ؛ استيراد com.google.gson.gsonbuilder ؛/*** تحويل كائن Java إلى Json ، تخطي ملفات محددة. */class public gsontest {public static void main (string [] args) {people p = new people () ؛ P.Setage (20) ؛ P.SetName ("الناس") ؛ P.SetSetName (صواب) ؛ asscerationStrategy iscorteStrategy = new SetterExCluscLusionStrategy () ؛ gson gson1 = new gsonbuilder () .SetExClusionStrategies (excludestrategy) .create () ؛ gson gson2 = new gson () ؛ String json1 = gson1.tojson (p) ؛ String json2 = gson2.tojson (p) ؛ System.out.println (JSON1) ؛ System.out.println (JSON2) ؛ people p1 = gson1.fromjson (json1 ، people.class) ؛ people p2 = gson2.fromjson (json2 ، people.class) ؛ system.out.println (p1) ؛ system.out.println (p2) ؛ } private static class setterexclusionStrategy تنفذ issectionStrategy {public boolean mustskipclass (class <؟> clazz) {return false ؛ } boolean public mustskipfield (fieldattributes f) {return f.getName (). startswith ("set") ؛ }}}اتضح أن هناك طريقتان لإنشاء كائنات GSON: تعني New GSON () إنشاء كائن GSON باستخدام التكوين الافتراضي ، وإذا تم إنشاؤه باستخدام طريقة gsonbuilder.create () ، يمكنك تخصيص بعض الإعدادات ، بشكل أساسي لجعل GSON أكثر ملاءمة لمواقع معينة محددة. يقوم الرمز الأزرق الأول في المثال أعلاه بإنشاء كائن GSON ، والذي يحتوي على تكوين خصائص الترشيح بدءًا من كلمة "SET" (إذا كنت بحاجة إلى تصفية نوع معين ، فيمكنك إعادة كتابة طريقة QustskipClass (الفئة <؟> clazz) من واجهة الاستثناءات. لذلك ، في هذا المثال ، عند تحويل كائن الأشخاص إلى JSON ، سيتم تصفية اسم السمة. نظرًا لعدم وجود سمة setName في JSON1 ، عند إلغاء التخلص من JSON1 في كائن الأشخاص ، فإن اسم setName of Boolean ليس له قيمة ، لذلك عند الطباعة ، يتم أخذ القيمة الافتراضية لنوع Boolean. لذلك تم الحصول على النتائج التالية:
{"name": "People" ، "Age": 20} {"Name": "People" ، "Age": 20 ،يدعم GSON أيضًا استخدام التعليقات التوضيحية. في حزمة com.google.gson.annotation ، هناك العديد من التعليقات التوضيحية الكشف ، SerializedName ، منذ وحتى. لديهم كل وظائف خاصة بهم. فيما يلي مثال رسمي لتقديم التعليقات التوضيحية شائعة الاستخدام:
يفضح:
يعمل هذا التعليق على السمة ، مما يشير إلى أنه عند التسلسل والتسلسل ، ستتعرض هذه السمة لكائن GSON. يكون هذا التعليق صحيحًا فقط عند إنشاء كائن GSON باستخدام طريقة GsonBuilder وطريقة gsonbuilder.excludefieldswithexposeannotation () ، وإلا فإنها غير صالحة. فيما يلي مثال على تقديم كيفية استخدام التعليق التوضيحي expose:
مستخدم الفئة العامة {expose private string firstName ؛ expose (serialize = false) سلسلة خاصة lastName ؛ expose (serialize = false ، deserialize = false) private string emailAddress ؛ كلمة مرور السلسلة الخاصة ؛}إذا قمت بإنشاء كائن GSON في طريقة GSON () الجديدة ، فستقوم طريقة Tojson () وطريقة FromJson () بتشغيل هذه الخصائص الأربعة عند التسلسل والتسلسل. ومع ذلك ، إذا كنت تستخدم GSON GSON = جديد GSONBUILDER (). ESCSELDFILSWITHOUTEXPOSEANNOTATION (). إنشاء () لإنشاء كائنات GSON ، فإن طرق GSON TOJSON () و FromJSON () ستستبعد حقول كلمة المرور ، لأن حقول كلمة المرور لا تتميز بتوسيع exposp. سوف يستبعد كائن GSON هذا أيضًا حقول LastName و EmailAddress ، لأن السمة Serialize Expose تم ضبطها على خطأ. وبالمثل ، سوف تستبعد GSON حقل EmailAddress أثناء التخلص من التخلص من التخلص من ذلك.
SerializedName:
يتم استخدام هذا التعليق التوضيحي على السمة ، مما يشير إلى أنه عندما يتم تسلسل هذه السمة في JSON ، يجب أن يتم تسلسل الاسم في القيمة المحددة بواسطة سمة قيمة التعليق.
سيتغلب هذا التعليق على أي FieldnamingPolicy ، بما في ذلك سياسة التسمية الافتراضية. فيما يلي مثال على تقديم كيفية استخدام شرح التعليق التوضيحي serializedname:
الفئة العامة someclasswithfields {serializedName ("name") سلسلة نهائية خاصة somefield ؛ سلسلة نهائية خاصة بعضها. someclasswithfields العامة (السلسلة A ، السلسلة B) {this.somefield = a ؛ this.someotherfield = b ؛ }}يوضح الرمز التالي نتائج تسلسل فئة الاختبار أعلاه:
someclasswithfields ObjectToserialize = someclasswithfields ("a" ، "b") ؛ gson gson = new gson () ؛ string jsonrepresentation = gson.tojson (objectToserialize) ؛ system.out.println (jsonrepresentation) ؛نتيجة التنفيذ هي:
{"الاسم": "A" ، "Someotherfield": "B"}يمكن ملاحظة أن الخاصية "Somefield" قد تم تسلسلها إلى "الاسم".
ملاحظة: يجب أن يكون اسم السمة المحدد في قيمة serializedName اسم سمة JSON صالح.