《第一行代码》》学习笔记---9.4 解析JSON 格式数据

学习本节之前,需要下载Apache,此处出具体的教程链接,https://blog.csdn.net/smile_shaco/article/details/74787612

首先准备好一个json文件,记得保存时的格式改为json就行了。

刚开始接触json,不太了解,解析JSON数据有多种方法,先学个两个

 1.JSONObject;

     

 private void sendRequsetWithOkHttp()
    {
        new Thread(new Runnable() {
            @Override
            public void run() {
                HttpURLConnection connection=null;
                BufferedReader reader=null;
            
             try{
                 OkHttpClient client=new OkHttpClient();
                 Request requset = new Request.Builder()
                         // 指定服务器的地址 - 10.0.2.2对于模拟器来说就是电脑本机的IP地址
                         .url("http://10.0.2.2:8080/get_data.json")
                         .build();
                 Response response=client.newCall(requset).execute();
                 String responseData=response.body().string();
                 paraseJSONWithGSON(responseData);
                 showResponse(responseData);
             }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        }).start();
    }
   private  void  paraseJSONWithJSONObject(String jsonData)
    {
        try {
            JSONArray jsonArray = new JSONArray(jsonData);
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                String id = jsonObject.getString("id");
                String name = jsonObject.getString("name");
                String version = jsonObject.getString("version");
                Log.d("MainActivity", "id is:" + id);
                Log.d("MainActivity", "version is:" + version);
                Log.d("MainActivity", "name is:" + name);
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

这里指的注意的是指定访问的服务器为电脑本机,郭神书上的url为10.0.2.2,可能是配置的路径不同,我的端口为8080,必须写到这,否则啥都显示不出,因为我是照着上面的链接配置的Apache.基本是照着书桥的代码,这里用的是OKHttp,也是接触的。

所以就是按着模板来写的,首先需要new一个client对象,姑且称为客户吧,

                                           然后啊,再new一个request对象,用来发起Http请求,但是光杆司令无趣,所以在request的build()

                                           方法前,可以连缀些其它方法,可以这么理解,在 request为被Build之前,可以加很多方法,

                                                      具体如 Request requset = new Request.Builder()
                                                     // 指定服务器的地址 - 10.0.2.2对于模拟器来说就是电脑本机的IP地址
                                                      .url("http://10.0.2.2:8080/get_data.json")
                                                      .build();现加一个吧,其他的暂时还不知啊.

                                           最后,调用OKHttpClient的newCall()方法来创建一个Call对象,并调用他的excute()方法,来发送请求并                                               获取服务器返回的数据. 这里有点难以理,贴个链接吧                                                                                                                         https://blog.csdn.net/qq_18402085/article/details/51052167

                                          这里的代码 :Response response=client.newCall(requset).execute();

                                          response 就是Response的对象,得到了服务器返回的数据,对数据可以使用一个String对象来实现得到                                            具体内容. String responseData=response.body().string();

                                          最后将这些数据内容使用JSONObject解析出来,看方法名就能知道了,.

                                           回顾下来,发现JSON的代码量还是很精简的.关键还使用了OKHttp,换做Http也不会这么简单的.

                      

2.GSON

 先比较两段代码吧

这是使用GSON解析JSON的代码,会发现更加精简了

private void  paraseJSONWithGSON(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 is:" + app.getId());
           Log.d("MainActivity", "version is:" + app.getVersion());
           Log.d("MainActivity", "name is:" + app.getName());
       }
   }

 具体来分析一下,官方解释是:可以将一段JSON格式的字符串自动映射成一个对象,从而不需要我们再手动去编写代码进行解析.

如果是一段JSON格式的数据,{"id":1,"name":"Tony"}, 可以定义一个Sdutent类,加入id和name两个字段,简单调用代码即可将json数据自动解析为Student对象了:

Gson gson=new Gson();

Student student=gson.fromJson(jsonDate,Student.class);

但是如果是JSON数组,那么就会麻烦一点,需要调用TypeToken将期待解析成 的数据类型传入到fromJson()方法中.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YuannaY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值