解析JSON数据之GSON

GSON可以将一段JSON格式的数据 == 自动映射 ==》成一个对象(或对象数组)

(Json:{}表示一个JSONObject对象,[]表示JSONArray数组(其元素就是一个JSONObject对象))

使用GSON:

1.  在app/build.gradle文件中,的dependencies闭包添加:implementation 'com.google.code.gson:gson:2.7'

2.  新建一个类ExampleObject,其字段属性  与 Json数据中的某个JSONObject对象键相对应,及对应getter/setter方法

public class Example{
    String a;
    String b;
    ...
    String z;
    
    /*以及相应的getter/setter方法*/
    
}

2.  分2种情况处理:当JSON数据单纯是一个JSONObject对象 {} ,或是JSONArray数组 [ {} ,{}  ...] 时

①  当JSON数据单纯是一个JSONObject对象 {},只需要简单的调用如下代码:

Gson gson = new Gson();
ExampleObject eo = gson.fromJson( JSON数据, ExampleObject.class)

②  当JSON数据是JSONArray数组 [ {} ,{}  ...] 时,需借助TypeToken类的getType() 将期望解析成的数据类型传入 fromJson() 中

Gson gson = new Gson();
List<ExampleObject> eos = gson.fromJson( JSON数据, new TypeToken<List<ExampleObject>>(){}.getType() );

简单例子(部分代码):

GSON基本使用如上步骤,下面给出例子部分代码:

  • 准备:在本地Apache服务器添加一个get_data.json文件,用于测试数据(此次使用了OKHttp)
Caption
  • 新建类App类,如下:
public class App {
    private String id;
    private String name;
    private String version;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }
}
  •  private void sendRequestWithOKHTTP() 在Activity中定义一个方法用于请求数据(使用OKHttp框架)
private void sendRequestWithOKHTTP() {
        new Thread(new Runnable() {  //新建子线程用于请求
            @Override
            public void run() {
                try {
                    OkHttpClient client=new OkHttpClient(); //创建OkHttpClient实例
                    Request request=new Request.Builder()   //借助Builder构建Request对象
                            .url("http://10.0.2.2/get_data.json").build();//指定访问的服务器地址是电脑本地
                    Response response=client.newCall(request).execute();
                    //调用OkHttpClient实例的newCall(request)获取Call对象,最后调用call的execute()获取response对象
                    //服务器返回的数据就在response对象里面
                    String responseData=response.body().string();  //取出数据

                    
                    //使用GSon解析Json数据
                    parseJsonByGSON(responseData);

                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }).start();
    }
  • private void parseJsonByGSON(String jsonData),Gson解析服务器返回的Json数据
    private void parseJsonByGSON(String jsonData) {
        Gson gson=new Gson();
        List<App> appList=gson.fromJson(jsonData,new TypeToken<List<App>>(){}.getType());
        for (App app:appList){
            Log.d("MainActivity","id 是 :"+app.getId());
            Log.d("MainActivity","name 是 :"+app.getName());
            Log.d("MainActivity","version 是 :"+app.getVersion());
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值