1,依赖
implementation 'com.google.code.gson:gson:2.8.6'
2、说明
可以将一段JSON格式的字符串自动映射成 一个对象。从而不用手动去进行解析
1:先定义实体类
2:解析JSON字符串
3:获取信息
3,使用
3.1 实体类
//实体类
public class Login {
private String uid;
private String user;
public Login() {
}
public Login(String uid, String user) {
this.uid = uid;
this.user = user;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
}
3.2 解析
@Test
public void testLogin(){
String s = "{ \"uid\": \"49\", \"user\": \"weiwei\"}";
Gson gson = new Gson();
Login login = gson.fromJson(s, Login.class); //解析函数
System.out.println(login.getUid());
System.out.println(login.getUser());
}
49
weiwei
3.3 解析JSON数组
[ …… ]表示一个数组
{……} 表示一个对象
需要借助TypeToken将期望数据解析成的数据类型传入到fromJSON中
@Test
public void testLoginList() {
String s = "[{ \"uid\": \"49\", \"user\": \"weiwei\"},{ \"uid\": \"50\", \"user\": \"jack\"}]";
Gson gson = new Gson();
List<Login> logins = gson.fromJson(s, new TypeToken<List<Login>>(){}.getType());
for(Login l:logins){
System.out.println(l.getUid());
System.out.println(l.getUser());
}
}
49
weiwei
50
jack
3.4解析转义字符
有时候在接受网络传来的数据,诸如:接受服务器端发来的数据。可能回出现下面的情况
"\"{ \\\"uid\\\": \\\"49\\\", \\\"user\\\": \\\"weiwei\\\"}\""
再比如说这么一个数据
{ "id": "5902", "email_source": "163邮箱", "addresser": "周芳", "theme": "这是一个悲伤怜人的故事,女主真的好可怜好无助。最后经历了绝望", }
而实际的接收情况是
"\"{\"id\":\"5902\", \"email_source\":\"163\\u90ae\\u7bb1\", \"addresser\":\"\\u5468\\u82b3\", \"theme\":\"\\u8fd9\\u662f\\u4e00\\u4e2a\\u60b2\\u4f24\\u601c\\u4eba\\u7684\\u6545\\u4e8b\\uff0c\\u5973\\u4e3b\\u771f\\u7684\\u597d\\u53ef\\u601c\\u597d\\u65e0\\u52a9\\u3002\\u6700\\u540e\\u7ecf\\u5386\\u4e86\\u7edd\\u671b\"}\"";
这就比较麻烦了
可以先解析成正常的字符串形式
再进行正常的解析即可
@Test
public void testEscape() {
String s = "\"{ \\\"uid\\\": \\\"49\\\", \\\"user\\\": \\\"weiwei\\\"}\"";
Gson gson = new Gson();
//转义
s = gson.fromJson(s,String.class);
System.out.println(s);
Login login = gson.fromJson(s, Login.class);
System.out.println(login.getUid());
System.out.println(login.getUser());
}
//结果
{ "uid": "49", "user": "weiwei"}
49
weiwei
@Test
public void testUnicode() {
String uni = "\"{\\\"id\\\":\\\"5902\\\",\\\"email_source\\\":\\\"163\\\\u90ae\\\\u7bb1\\\",\\\"addresser\\\":\\\"\\\\u5468\\\\u82b3\\\",\\\"theme\\\":\\\"\\\\u8fd9\\\\u662f\\\\u4e00\\\\u4e2a\\\\u60b2\\\\u4f24\\\\u601c\\\\u4eba\\\\u7684\\\\u6545\\\\u4e8b\\\\uff0c\\\\u5973\\\\u4e3b\\\\u771f\\\\u7684\\\\u597d\\\\u53ef\\\\u601c\\\\u597d\\\\u65e0\\\\u52a9\\\\u3002\\\\u6700\\\\u540e\\\\u7ecf\\\\u5386\\\\u4e86\\\\u7edd\\\\u671b\\\"}\"";
Gson gson = new Gson();
uni = gson.fromJson(uni,String.class);
Email emails = gson.fromJson(uni,Email.class);
System.out.println(emails.getId());
System.out.println(emails.getEmail_source());
System.out.println(emails.getAddresser());
System.out.println(emails.getTheme());
}
5902
163邮箱
周芳
这是一个悲伤怜人的故事,女主真的好可怜好无助。最后经历了绝望