zoukankan      html  css  js  c++  java
  • 核心技术篇:6.android网络编程之json解析

      前言:好一段时间没写博客了,说最近挺忙的,感觉像是个借口,每天还是同样的24个小时,每天还是同样的5:30就准时下班,每天晚上还是有大量的空余时间...最直接的原因就是,最近堕落了。脑子里也时常会有很多想法浮现,都是些比较实际的想法,但往往就是浮现那一下,心情激动了一下,心里默默告诉自己,有时间就要这么做...好多想法都被一些其它的诱惑给磨灭掉了,要么是打球、要么是看电影、要么是处理一些乱七八糟的事去了。总之,近段时间,花在技术上的时间很少很少,好好反思下。

      前段时间,来了一位新疆的客户,提出了一个需求,需求不难实现,只是客户很赶时间,希望在两天内搞出来,想想当时还是年轻气盛,没多想,就答应下来了。其中有一个环节需要与客户的后台进行对接,后台接口返回的数据类型为json,很简单的数据结构,没有嵌很多层。但由于自己之前与后台的对接用的一直都是webservice,突然出来个json,一下子有点蒙了。不过对于json这么常用的数据结构,都没有把握其解析方法,自己也是该好好反思。刚遇到这问题时,想着问题搞完了一定要写一篇博客来好好记录下json的解析方法,以便后期的项目用到时,可以快速上手。但项目过去好一段时间了,博客一直推到了今天才开始写,其中的原因就像开篇说的...

      JSON定义:一种轻量级的数据交换格式,具有良好的可读和快速编写特性,业内主流技术为其提供了完整的解决方案,从而可以在不同平台间进行数据交互。

      JSON解析:在讲解JSON解析方法前,先来了解两个基本概念:

        1.JSONObject:一个基本的json对象,有关json定义的基本单元,说白了,其实就是一堆键值对(key/value),对外体现为一个标准的字符串,如:{"name":"dean"}.最外被大括号包裹,内部的key和value之间用:分隔,value的类型包括:Boolean,JSONArray,JSONObject,Number,String,JSONObject.NULL object.

        2.JSONArray:它代表一组有序的数值,对外的表现形式为:最外层用方括号包裹,数值以逗号,分隔,如:[value1,value2,value3]

      JSON总共有四种数据格式:a.直接对象 b.数组 c.对象里面包含数组 d.数组里面包含数组 其实解析原理都一样,遇到object就可以直接调用object.getString()方法获取value,遇到array就逐个转换为object,再调用object.getString()方法获取value.   下面以代码形式展示具体如何解析JSON:

    //JSON对象直接解析
            btnObjectPaser.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    try {
                        //JSON字符串
                        String json="{"username":"dean","age":23,"addr":"广东省广州市天河区"}";
                        //根据JSON字符串 获得JSON object对象
                        JSONObject jsonObject =new JSONObject(json);
                        //根据key 获取相应的value
                        String str="名字:"+jsonObject.getString("username")+"  年龄:"+jsonObject.getString("age")+"  住址:"+jsonObject.getString("addr")+"
    ";
                        tvShowResult.setText(str);
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            });
            //JSON数组直接解析
            btnArrayPaser.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    try {
                        //JSON字符串
                        String json="[{"username":"dean","age":"23","addr":"广东省广州市天河区"}," +
                                "{"username":"小张","age":"32","addr":"广东省广州市白云区"}]";
                        String str = "";
                        //根据JSON字符串 获得JSON数组
                        JSONArray jsonArray =new JSONArray(json);
                        for(int i=0;i<jsonArray.length();i++){
                            JSONObject jsonObject = (JSONObject)jsonArray.opt(i);//将JSON数组通过opt()函数转换为JSONObject
                            //根据key 获取相应的value
                            str +="名字:"+jsonObject.getString("username")+"  年龄:"+jsonObject.getString("age")+"  住址:"+jsonObject.getString("addr")+"
    ";
                        }
                        tvShowResult.setText(str);
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            });
            //JSON对象里有数组
            btnArrayInObject.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    try {
                        //JSON字符串
                        String json= "{"username":"张木生",age:11,"jicheng":[{"zhengshu":"PMP","date":"2011年"}," +
                                "{"zhengshu":"信息系统项目管理师","date":"2012年"}],"addr":"江西"}";
                        String str = "";
                        //根据JSON字符串 获得JSON对象
                        JSONObject jsonObject =new JSONObject(json);
                        str +="名字:"+jsonObject.getString("username")+"  年龄:"+jsonObject.getString("age");
                        JSONArray jsonArray = new JSONArray(jsonObject.getString("jicheng"));
    
                        for(int i=0;i<jsonArray.length();i++){
                            JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i);//将JSON数组通过opt()函数转换为JSONObject
                            //根据key 获取相应的value
                            str +="证书:"+jsonObject2.getString("zhengshu")+"  日期:"+jsonObject2.getString("date")+";";
                        }
                        str +="地址:"+jsonObject.getString("addr");
                        tvShowResult.setText(str);
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            });
            //JSON数组里有数组
            btnArrayInArray.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    try {
                        //JSON字符串
                        String json="["+
                                "{"devid":"1234567800","gps":[{"time":"2014-11-12","latitude":"29.4963","longitude":"116.189"},{"time":"2014-11-12","latitude":"29.4963","longitude":"116.189" }],"devname":"赣01"},"+
                                " {"devid":"1234567800","gps":[{"time":"2014-11-12","latitude":"29.4963","longitude":"116.189"},{"time":"2014-11-12","latitude":"29.4963","longitude":"116.189" }],"devname":"赣92"},"+
                                " {"devid":"1234567800","gps":[{"time":"2014-11-12","latitude":"29.4963","longitude":"116.189"},{"time":"2014-11-12","latitude":"29.4963","longitude":"116.189" }],"devname":"赣43"}"+
                                "]";
                        String str = "";
                        //根据JSON字符串 获得JSON数组
                        JSONArray jsonArray = new JSONArray(json);
                        for(int i=0;i<jsonArray.length();i++){
                            JSONObject jsonObject = (JSONObject)jsonArray.opt(i);//将JSON数组通过opt()函数转换为JSONObject
                            //根据key 获取相应的value
                            str +="ID:"+jsonObject.getString("devid")+",";
                            //获取第二层数组
                            JSONArray jsonArray2 = new JSONArray(jsonObject.getString("gps"));
    //                        JSONArray jsonArray2 = jsonObject.getJSONArray("gps");//也可以这样获得第二层数组
                            for(int j=0;j<jsonArray2.length();j++){
                                JSONObject jsonObject2 = (JSONObject)jsonArray2.opt(j);
                                str +=" GPS时间:"+jsonObject2.getString("time")+" GPS经度:"+jsonObject2.getString("latitude")+" GPS维度:"+jsonObject2.getString("longitude")+";";
                            }
                            str +=" 设备名称:"+jsonObject.getString("devname")+".";
                        }
                        tvShowResult.setText(str);
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            });

      

  • 相关阅读:
    MS CRM 2011 RC中的新特性(4)——活动方面之批量编辑、自定义活动
    最近的一些有关MS CRM 2011的更新
    MS CRM 2011 RC中的新特性(6)——连接
    MS CRM 2011 RC中的新特性(7)—仪表板
    参加MS CRM2011深度培训课程——第一天
    MS CRM 2011插件调试工具
    MS CRM2011实体介绍(四)——目标管理方面的实体
    MS CRM 2011 RC中的新特性(3)——客户服务管理方面
    MS CRM 2011 RC中的新特性(8)—数据管理
    ExtAspNet 登陆
  • 原文地址:https://www.cnblogs.com/dream550/p/4854930.html
Copyright © 2011-2022 走看看