gson解析json

Posted 安辉就是我

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gson解析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:Username='Ansen', age=20
05-12 17:18:49.001 14135-14135/com.ansen.gson I/MainActivity: parseArrayList user:Username='Uini', age=30
05-12 17:18:49.001 14135-14135/com.ansen.gson I/MainActivity: parseArrayList user:Username='Lina', age=10
05-12 17:18:49.001 14135-14135/com.ansen.gson I/MainActivity: parseArrayList key:1 user:Username='haha', age=11
05-12 17:18:49.001 14135-14135/com.ansen.gson I/MainActivity: parseArrayList key:2 user:Username='nihao', age=22
05-12 17:18:49.001 14135-14135/com.ansen.gson I/MainActivity: jsonStr:"name":"nime","age":111

源码下载

源码下载

以上是关于gson解析json的主要内容,如果未能解决你的问题,请参考以下文章

安卓怎么用gson解析服务端返回的复杂json数据

Gson解析Json

使用gson解析怎么将json字符串解析为数组

JSON 之GSON 解析

gson怎么解析数组和空数组?

json解析之gson