json解析

/**
 * json原生解析的案例
 * 
 * 详细见截图的资料"json解析之原生解析"
 * 
 * 遇到{} 就是对象  遇到[]  就是集合
 * @author Administrator
 *
 */
public class Demo implements Callback{

    public static void main(String[] args){
        Demo demo = new Demo();
        Utls u = new Utls("http://www.tngou.net/api/top/classify",demo);
        u.getJson();//联网获取json数据
    }


    //解析jison数据
    @Override
    public void showJson(String content) {
        List<Tngou> tngous = new ArrayList<>();

        //创建容器,由我们手动创建javaBean知道,要储存Tngou
        //rootObject就是json串对象的根对象
        JSONObject rootObject = new JSONObject(content);

        //使用JSONObject接受json数据进行构造根object,一层层解析,遇到数组就使用getJSONArray方法,遇到对象就创建JSOOBject对象,进行储存在javaBean对象上
        Root root = new Root();
        root.setStatus(rootObject.getBoolean("status"));

        JSONArray tngou = rootObject.getJSONArray("tngou");
        for(int i = 0;i <tngou.length(); i++){
            JSONObject object = tngou.getJSONObject(i); //获取集合

            Tngou t = new Tngou();
            t.setTitle(object.getString("title"));
            tngous.add(t);
        }

        root.setTngou(tngous);

        System.out.println(root.getStatus());
        //遍历集合中的Tngou对象
        for(Tngou tngou1: root.getTngou()) {
            System.out.println(tngou1.getTitle());
        }
    }

    }

使用volley获取网络数据,并使用原生解析json字符串


本案例使用第三方框架进行联网,获取到数据后使用android原生解析获取的json数据,展示到屏幕上

  1. 原理:将手机号码传到网上,通过第三方api获取手机归属地。将获取的结果展示到手机上

  2. studio集成volley

    右击项目 –》open model setting–》 选择Dependencies –》选择“+” 联网添加volley库

  3. 使用volley

 在Volley内,一般的Http的请求方法有三种,分别是StringRequest,JsonObjectRequest以及JsonArrayRequest,而每个方法都可以分为GET和POST请求方式。从它们的名字可以知道,StringRequest是请求一段字符串,JsonObjectRequest是请求一个JSON对象。JsonArrayRequest是请求一组JSON数组。

1、建立请求队列

      RequestQueue queue = Volley.newRequestQueue(this);

2. 创建请求对象(在这里边有请求成功的回调,获取数据后解析即可)

        /**
         * 参数一:请求方法 get/post
         * 参数二:url
         * 参数三:请求成功的回调
         * 参数四:请求失败的回调
         */
        StringRequest request = new StringRequest(Method.PUBLIC,
                url,
                //请求成功后的回调
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String json) {
                        Log.i("json", json);
                        /*打印的结果:
                        * {"resultcode":"200",
                             "reason":"Return Successd!",
                            "result":{"province":"河南","city":"三门峡","areacode":"0398","zip":"472000","company":"中国移动","card":"移动预付费卡"},
                            "error_code":0}*/

                        //解析json数据
                        volleyJson(json);
                    }
                },
                //请求失败后的回调
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.i("error",error.toString());

                    }
                });

        //将请求添加到请求队列中
        queue.add(request);

    }
  1. 原生解析json数据

原生解析的原则就是:遇到{}就用getJSONObject 遇到[] 就用getJSONArray

    //服务器返回的json串如下
    {"resultcode":"200",
      "reason":"Return Successd!",
      "result":{"province":"河南","city":"三门峡","areacode":"0398","zip":"472000","company":"中国移动","card":"移动预付费卡"},
       "error_code":0}

     private void volleyJson(String json) {
        //获取jsonObject对象
        try {
            JSONObject jsonObject = new JSONObject(json);
            //原生解析原则 遇到{}就用getJSONObject 遇到[] 就用getJSONArray
            JSONObject object = jsonObject.getJSONObject("result");
            //省份
            String province = object.getString("province");
            //城市
            String city = object.getString("city");
            //区号
            String areacode = object.getString("areacode");
            // 运营商
            String company = object.getString("company");
            //卡的类型
            String card = object.getString("card");

            content.setText("归属地:" + province + city + "\n"
                    + "区号:" + areacode + "\n"
                    + "运营商:" + company + "\n"
                    + "用户类型:" + card
            );


        } catch (JSONException e) {
            e.printStackTrace();
        }

源码地址:https://github.com/bailangsyc/QereyPhoneNumAddress

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值