zoukankan      html  css  js  c++  java
  • Android JSON 解析关键代码

    Android Json 解析其实还是蛮重要的知识点,为什么这么说呢,因为安卓通信大部分的协议都是使用 json 的方式传输,我知道以前大部分是使用的 xml ,但是时代在发展社会在进步,json 成为了主流,那 json 解析就显得尤为重要。

    json的形式在我看来就是键值对集合,所以关键就是 json字符串转换为 json对象,和 json对象转换为 json字符串。

    网站提供给Android的API接口返回的都是json格式字符串,所以说呢,安卓调用API(例如天气的API接口)接口开发的必经之路就是将网站返回的json格式字符串转化为json对象,我们在用的时候就可以.属性(点 属性)的方式把需要的值给找出来。

    期初我想要的是没有 [ ] 括起来的json字符串,还没有实验成功,但是找到了有括号括起来的json字符串,没问题了!

    Json 解析(最外层有 【 】包成列表的形式 ):

    [{"id":"5","version":"5.5","name":"愤怒的小鸟"},
    {"id":"6","version":"7.0","name":"神庙逃亡"},
    {"id":"7","version":"3.5","name":"保卫萝卜"}]

    将上面 json 格式字符串转化为 json 对象:

      private void parseJSONWithJSONObject(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("woider", "id is " + id);
                    Log.d("woider", "name is " + name);
                    Log.d("woider", "version is " + version);
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    以上就是含有 [ ] 包裹成列表形式的json字符串解析的关键代码。

    *********************   手动分割线     ***************************

    那么有些时候,例如天气的API接口没有最外层的方括号包裹,单纯的一条json数据怎么办?我也找到案例了,哈哈哈~~

    json 字符串:

    {
        "user":{
            "name":"wjw",
            "age":"20",
            "isMan":true
        }
    }

    Android  Json解析的代码案例:

    public class OrgJSONTest {
    
        public static String json = "{"user":{"name":"wjw","age":"20","isMan":true}}";
    
    
        public static void main(String[] args){
            JSONObject obj = new JSONObject(json);//最外层的JSONObject对象
            JSONObject user = obj.getJSONObject("user");//通过user字段获取其所包含的JSONObject对象
            String name = user.getString("name");//通过name字段获取其所包含的字符串
    
            System.out.println(name);
    
    
        }
    }

    OK!那么Android的json解析基础基本上没问题了,至于json字符串转对象还没有这么用到过,用到的时候在做笔记吧!

     

    *******************************  手动分割线   ************************************

    另外提供一个 天气 的API接口:

    天气API接口  : 这个接口呢,在我发博的时候还是可以用的,做一些基础的练习是没有问题的。

    下面其中有一个请求北京天气是返回的数据:

    {"date":"20180420","message":"Success !","status":200,"city":"北京","count":485,"data":{"shidu":"58%","pm25":84.0,"pm10":152.0,"quality":"轻度污染","wendu":"19","ganmao":"儿童、老年人及心脏、呼吸系统疾病患者人群应减少长时间或高强度户外锻炼","yesterday":{"date":"19日星期四","sunrise":"05:33","high":"高温 26.0℃","low":"低温 13.0℃","sunset":"18:56","aqi":150.0,"fx":"东南风","fl":"4-5级","type":"多云","notice":"阴晴之间,谨防紫外线侵扰"},"forecast":[{"date":"20日星期五","sunrise":"05:32","high":"高温 28.0℃","low":"低温 14.0℃","sunset":"18:57","aqi":103.0,"fx":"南风","fl":"4-5级","type":"多云","notice":"阴晴之间,谨防紫外线侵扰"},{"date":"21日星期六","sunrise":"05:30","high":"高温 17.0℃","low":"低温 12.0℃","sunset":"18:58","aqi":111.0,"fx":"东北风","fl":"3-4级","type":"中雨","notice":"记得随身携带雨伞哦"},{"date":"22日星期日","sunrise":"05:29","high":"高温 20.0℃","low":"低温 11.0℃","sunset":"18:59","aqi":36.0,"fx":"北风","fl":"3-4级","type":"多云","notice":"阴晴之间,谨防紫外线侵扰"},{"date":"23日星期一","sunrise":"05:28","high":"高温 20.0℃","low":"低温 9.0℃","sunset":"19:00","aqi":29.0,"fx":"东北风","fl":"3-4级","type":"多云","notice":"阴晴之间,谨防紫外线侵扰"},{"date":"24日星期二","sunrise":"05:26","high":"高温 24.0℃","low":"低温 10.0℃","sunset":"19:01","aqi":33.0,"fx":"西南风","fl":"3-4级","type":"晴","notice":"愿你拥有比阳光明媚的心情"}]}}
  • 相关阅读:
    HDU 1058 Humble Numbers
    HDU 1421 搬寝室
    HDU 1176 免费馅饼
    七种排序算法的实现和总结
    算法纲要
    UVa401 回文词
    UVa 10361 Automatic Poetry
    UVa 537 Artificial Intelligence?
    UVa 409 Excuses, Excuses!
    UVa 10878 Decode the tape
  • 原文地址:https://www.cnblogs.com/wjw1014/p/8885846.html
Copyright © 2011-2022 走看看