Android開発のJSONデータ解析


Android開発で出会ったJsonデータ解析は、本人がシステムで提供した解析もアリが提供したfastJson、第三者のGson、JackJsonも使用したことがある.しかし、その解析が一番使いやすいのは、私はまだ白いと言っています.今日、大牛博文を見て、このいくつかの解析の性能を分析しました.JackJsonの消費時間は最も短いです.私はこの方面の知識を再整理して、次のツール類JackJsonFactoryがあります.java:
import java.io.IOException;
import java.util.ArrayList;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;

@SuppressWarnings("unchecked")
public class JackJsonFactory {

    private static JackJsonFactory mJackJsonFactory;
    private ObjectMapper mObjectMapper;

    public JackJsonFactory(){
        mObjectMapper=new ObjectMapper();
    }

    public static JackJsonFactory getInstance(){
        if(mJackJsonFactory==null){
            synchronized (JackJsonFactory.class) {
                if(mJackJsonFactory==null){
                    mJackJsonFactory=new JackJsonFactory();
                }
            }
        }
        return mJackJsonFactory;
    }
    public String toJson(Object mObject){
        String result="";
        try {
            result=mObjectMapper.writeValueAsString(mObject);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return result;
    }

    public <T> T fromJson(String json,T t){
        T result=null;
        try {
            result=(T) mObjectMapper.readValue(json, t.getClass());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return result;
    }

    public <T> ArrayList<T> fromJsonList(String json,TypeReference<ArrayList<T>> mTypeReference){
        ArrayList<T> result=null;
        try {
            result=mObjectMapper.readValue(json, mTypeReference);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return result;
    }

}

もちろんGsonに対して揺るぎない人も少なくないが、汎用解析では以下の問題に直面する可能性がある.com.google.gson.internal.LinkedTreeMap cannot be cast to test.UserBean at t..以下に関連する解析方法を示します.
public <T> ArrayList<T> fromJsonList(String json, Class<T> cls) {  
        ArrayList<T> mList = new ArrayList<T>();  
        JsonArray array = new JsonParser().parse(json).getAsJsonArray();  
        for(final JsonElement elem : array){  
            mList.add(mGson.fromJson(elem, cls));  
        }  
        return mList;  
    } 

もちろん、JackJsonのようにパラメータを伝えたいなら、コードは以下の通りです.
public <T> ArrayList<T> fromJsonList(String json,TypeToken<ArrayList<T>> mTypeToken){
        ArrayList<T> list=mGson().fromJson(json, mTypeToken.getType());
        return list;
    }
JackJsonFactory   jackson-all-1.7.6.jar             ,          jar         ,      
。  Json               ,TypeReference<ArrayList<T>>         new,      TypeReference ArrayList,
            T  T.class,          TypeReference,         。           ,  
        ,               ,    ,         。