gson解析json

json介紹

JSON(JavaScript Object Notation, JS 對象標記) 是一種輕量級的數據交換格式。它基於 ECMAScript 規範的一個子集,採用徹底獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成爲理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提高網絡傳輸效率。如今大部分APP都使用json給前端返回數據。前端

gson包

Gson 是 Google 提供的用來在 Java 對象和 JSON 數據之間進行映射的 Java 類庫。能夠將一個 JSON 字符串轉成一個 Java 對象,或者反過來。java

幾種常見的json數據如何解析成java對象

若是用的Android Sutdio開發,能夠經過在線引用庫的方式。在project/app/build.gradle文件裏面的dependencies下加入一句代碼:git

compile 'com.google.code.gson:gson:2.8.0'

gradle會默認從Jcenter Maven倉庫獲取aar文件。github

解析對象

咱們如今有一個json字符串:"{'name':'Ansen', 'age':20}",有兩個屬性name跟age,咱們能夠寫一個實體類User來對應.重寫了toString方法。輸出對象的時候會輸出全部屬性。而不是一個hash值。編程

public class User {
    private String name;//姓名
    private int 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;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

使用gson包把json字符串轉成User對象一句代碼就搞定,這裏用的gson對象是MainActivity的實例變量。調用fromJson方法就能轉換了。json

String jsonStr="{'name':'Ansen', 'age':20}";
User user=gson.fromJson(jsonStr, User.class);
Log.i("MainActivity","parseObject user:"+user.toString());

解析成數組

上面咱們提到了json字符串轉對象,在企業開發中,服務器給咱們的是一個數組格式的json數據也很常見的。跟轉換對象基本同樣的。數組

String jsonStr="[{'name':'Uini', 'age':30},{'name':'Lina', 'age':10}]";
List<User> users=gson.fromJson(jsonStr,new TypeToken<List<User>>() {}.getType());
for(int i=0;i<users.size();i++){
    Log.i("MainActivity","parseArrayList user:"+users.get(i));
}

解析成Map

String jsonStr="{'1': {'name':'haha', 'age':11},'2': {'name':'nihao', 'age':22}}";
Map<String, User> users = gson.fromJson(jsonStr, new TypeToken<Map<String,User>>() {}.getType());
for(String key:users.keySet()){
    Log.i("MainActivity","parseArrayList key:"+key+" user:"+users.get(key));
}

對象解析成json字符串

咱們知道把json字符串轉成object,那若是想把對象轉成json字符串呢?其實也很簡單,gson包都給咱們封裝好了。咱們new一個User對象,而後調用gson類的toJson方法就能把user對象轉成json字符串。服務器

User user=new User();
user.setAge(111);
user.setName("nime");
String jsonStr=gson.toJson(user);
Log.i("MainActivity","jsonStr:"+jsonStr);

運行以上代碼,打印的log以下:網絡

05-12 17:18:48.991 14135-14135/com.ansen.gson I/MainActivity: parseObject user:User{name='Ansen', age=20}
05-12 17:18:49.001 14135-14135/com.ansen.gson I/MainActivity: parseArrayList user:User{name='Uini', age=30}
05-12 17:18:49.001 14135-14135/com.ansen.gson I/MainActivity: parseArrayList user:User{name='Lina', age=10}
05-12 17:18:49.001 14135-14135/com.ansen.gson I/MainActivity: parseArrayList key:1 user:User{name='haha', age=11}
05-12 17:18:49.001 14135-14135/com.ansen.gson I/MainActivity: parseArrayList key:2 user:User{name='nihao', age=22}
05-12 17:18:49.001 14135-14135/com.ansen.gson I/MainActivity: jsonStr:{"name":"nime","age":111}

源碼下載

源碼下載app

相關文章
相關標籤/搜索