json介紹 JSON(JavaScript Object Notation, JS 對象標記) 是一種輕量級的數據交換格式。它基於 ECMAScript 規範的一個子集,採用完全獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。 易於人閱讀和編寫 ...
json介紹
JSON(JavaScript Object Notation, JS 對象標記) 是一種輕量級的數據交換格式。它基於 ECMAScript 規範的一個子集,採用完全獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提升網路傳輸效率。現在大部分APP都使用json給前端返回數據。
gson包
Gson 是 Google 提供的用來在 Java 對象和 JSON 數據之間進行映射的 Java 類庫。可以將一個 JSON 字元串轉成一個 Java 對象,或者反過來。
幾種常見的json數據如何解析成java對象
如果用的Android Sutdio開發,可以通過線上引用庫的方式。在project/app/build.gradle文件裡面的dependencies下加入一句代碼:
compile 'com.google.code.gson:gson:2.8.0'
gradle會預設從Jcenter Maven倉庫獲取aar文件。
解析對象
我們現在有一個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方法就能轉換了。
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}