Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android的數據處理:使用annotation實現JSON字符串解析為java對象

Android的數據處理:使用annotation實現JSON字符串解析為java對象

編輯:關於Android編程

Annotation是Java語言所提供的一種很有用的機制,特別在用於Java對象的描述化處理時能大大簡化代碼量。在閱讀本文之前最好先了解一下Java Annotation的基礎知識,在這一方面在網上很容易找到學習資料,比如下面這一篇:   JAVA ANNOTATION詳解 JSON與Java對象之間的形式化轉換在一些J2EE的框架中有提供,但是在Android中沒有實現。本文主要介紹如何通過annotation實現一種形式化的方法,在Android上實現JSON字符串與Java對象之間的相互轉化。   首先定義一個用於annotaion類型,在定義Java類時,可以使用該類型來標記哪些域(Field)需要輸出到JSON字符串中。     [java]   @Target({ElementType.FIELD})   @Retention(RetentionPolicy.RUNTIME)    public @interface JSONValue {       String tag() default "";   }     該annotation包括一個變量tag,這是指其所標記的域在JSON字符串中的前導字符串(名稱)。 然後定義一個轉換工具類,用於Java對象與JSON對象之間的轉換。   [java]  public class JSONConverter {          public static void fromJSon(String json_string, Object o) throws Exception {           JSONObject = new JSONObject(json_string);                   JSONObject jo = new JSONObject();           Field[] fields = o.getClass().getFields();           for(Field f : fields) {               if(f.isAnnotationPresent(QueryValue.class)) {                   JSONValue jv = f.getAnnotation(JSONValue.class);                   String tag = jv.tag();if(tag.length() > 0) {                       if(f.getType().getSimpleName().equals("int")) {                           f.setInt(o, jo.optInt(tag));                       }                       else {                           f.set(o, jo.optString(tag));                       }                   }               }           }           return jo.toString();       }              public static String toJSon(Object o) throws Exception {           JSONObject = new JSONObject();           Field[] fields = o.getClass().getFields();           for(Field f : fields) {               if(f.isAnnotationPresent(QueryValue.class)) {                   JSONValue jv = f.getAnnotation(JSONValue.class);                   String tag = jv.tag();                   if(tag.length() > 0) {                       if(f.getType().getSimpleName().equals("int")) {                           jo.put(tag, f.getInt(o));                       }                       else {                           Object v = f.get(o);                           if(v != null) jo.put(tag, v);                       }                   }               }           }           return jo.toString();       }   }     上述工具類實現了兩個靜態方法:fromJSON()用於從JSON對象中解析出Java對象,toJSON()用於將一個Java對象轉換為JSON對象。在上述示例中僅支持int、String兩種數據類型,這已經能滿足絕大多數應用的需要。如果還想支持其它類型,則需要根據示例進行修改。另外,上述示例尚不支持JSON數組類型。     然後是定義需要轉為為JSON對象的Java類型,定義時需要使用前面定義的annotation,比如: [java]   class MyObject {       @JSONValue(tag="id")       public int mId;       @JSONValue(tag="name")       public String mName;   }     在定義需要輸出到JSON對象的域時,將該域定義為public類型,並使用JSONValue進行標記,同時指定該域在JSON對象中的前導字符串(名稱)。在使用時可以很簡單地將該類型的對象轉為JSON字符串: [java]  MyObject o = new MyObject();   o.mId = 123;   o.mName = "張三";   String json = JSONConverter.toJSON(o);     轉換後的JSON字符串型為:{"id":123,"name":"張三”}; JSON字符串也可以很容易解析成Java對象: [java]  String json_string =  {"id":123,"name":"張三”};   MyObject o = new MyObject();   JSONConverter.fromJSON(json_string, o);    
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved