Android中Json的解析和構建

Json作爲一種輕量級的數據交換格式,在Android中的使用無需多說,除了用於網絡數據傳輸,我們還偶爾在App代碼中拿它做配置文件,相當於XML。

今天對Android中的幾種Json工具作一個簡單的用法上的記錄。


老規矩,在節目開始之前,先來一個搞笑段子。

女神要買電腦,我瘋狂地幫她查參數,比價格,把優勢劣勢分析了一遍。最後,她一句:就買那個粉色的吧。

男閨蜜要相親,我瘋狂地幫他算星座,比血型,把性格婚姻融洽度分析了一遍,最後,他一句:就選那個胸大的吧。


言歸正傳,我們假定有一個Java Bean:User,它有兩個屬性:name、age

public class User {

    private String name = null;

    private int age = 0;

    public User(){}

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
我們要把Java對象轉換成Json String,再把Json String轉換成Java對象。

1、Google的GSON

對象 to Json

Gson gson = new Gson();
User user = new User("aa", 20);
String jsonString = gson.toJson(user);
Log.e(TAG, jsonString);


Json to 對象

String jsonString = "{\"age\":20,\"name\":\"aa\"}";
User user = gson.fromJson(jsonString, User.class);
Log.e(TAG, user.getName() + ":" + user.getAge());


對象數組 to Json
List<User> users = new ArrayList();
users.add(new User("aa", 10));
users.add(new User("bb", 20));
String jsonString = gson.toJson(users);
Log.e(TAG, jsonString);


Json to 對象數組

String jsonString = "[{\"age\":10,\"name\":\"aa\"},{\"age\":20,\"name\":\"bb\"}]";
TypeToken<List<User>> token = new TypeToken<List<User>>(){};
Type type = token.getType();
List<User> users = gson.fromJson(jsonString, type);
for(int i = 0; i < users.size(); i++) {
    Log.e(TAG, users.get(i).getName() + ":" + users.get(i).getAge());
}


2、Alibaba的fastJson

對象 to Json

User user = new User("aa", 20);
String jsonString = JSON.toJSONString(user);
Log.e(TAG, jsonString);

Json to 對象

String jsonString = "{\"age\":20,\"name\":\"aa\"}";
User user = JSON.parseObject(jsonString, User.class);
Log.e(TAG, user.getName() + ":" + user.getAge() + ":" + user.getFather());


3、org.JSON

對象 to Json

User user = new User("aa", 20);
JSONObject jsonObject = new JSONObject();
try {
    jsonObject.put("name", user.getName());
    jsonObject.put("age", user.getAge());
    String jsonString = jsonObject.toString();
    Log.e(TAG, jsonString);
} catch (JSONException e) {
    e.printStackTrace();
}


Json to 對象

String jsonString = "{\"age\":20,\"name\":\"aa\"}";
try {
    JSONObject jsonObject = new JSONObject(jsonString);
    String name = jsonObject.getString("name");
    int age = jsonObject.getInt("age");
    Log.e(TAG, "name=" + name + ", age=" + age);
    User user = new User(name, age);
} catch (JSONException e) {
     e.printStackTrace();
}


Json的使用在實際項目中基本上都會再做一個簡單的封裝,這個就是列舉了一下主要的Api。


至於這三個的性能,網上有人做過實驗:

在數據量一般的情況下,GSON稍微好點,在數據量特別大(千萬級)的時候,FastJson展現出很好的性能,可能這就是爲什麼Alibaba給它取名叫fastJson。


本期節目就到這裏,感謝大家的收看,下期再見~








發佈了40 篇原創文章 · 獲贊 88 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章