JSON(JavaScript Object Notation, JS 對象標記) 是一種輕量級的數據交換格式。它基於 ECMAScript 規範的一個子集,採用徹底獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成爲理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提高網絡傳輸效率。如今大部分APP都使用json給前端返回數據。前端
Gson 是 Google 提供的用來在 Java 對象和 JSON 數據之間進行映射的 Java 類庫。能夠將一個 JSON 字符串轉成一個 Java 對象,或者反過來。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)); }
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字符串轉成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