zoukankan      html  css  js  c++  java
  • android下基本json串的生成与解析

    以前就用过json串,不过是在java环境下面,如今转移到android环境下,java里面生成解析json串的jar包与android中自带的冲突,所以也只能用安卓自带的。

     
    先前查网上的资料,感觉很多都说的很乱,直接给出了例子,也不解释一下就算完成,他们自己肯定是明白的,但是让读者理解起来肯定有点难度。而且解析的方法很多,而这里,我就介绍一种最原始最简单的吧。希望我拙劣的表达能力不会影响到你们的理解。
     
    首先我们先讲一下json串格式
     
    比如对象pet(宠物)
     
    class pet{
     
    int petid;//编号
     
    String petname;//名称
     
    String pettype;//类型
     
    }
     
    那么对象的json串形式就是
     
    {"pet":[{"petid":1000,"petname":"name1","pettype":"type1"}]}
     
    而如果我们创建多个pet对象,那么字符串形式就为:
     
    {"pet":[{"petid":1000,"petname":"name1","pettype":"type1"},{"petid":1002,"petname":"name2","pettype":"type2"}]}
     
    这里定义的如果是int型,值就不要添加"号,如果String类型或者其他类型,则添加"。
     
    一、生成json串
     
    好了,下面我们来利用android自带的JSONObject来创建一个json字符串。
     
     
    [java] 
    public String petToJson(Pet pet) {  
            String jsonresult = "";//定义返回字符串  
            JSONObject object = new JSONObject();//创建一个总的对象,这个对象对整个json串  
            try {  
                JSONArray jsonarray = new JSONArray();//json数组,里面包含的内容为pet的所有对象  
                JSONObject jsonObj = new JSONObject();//pet对象,json形式  
                jsonObj.put("petid", pet.getPetid());//向pet对象里面添加值  
                jsonObj.put("petname", pet.getPetname());  
                jsonObj.put("pettype", pet.getPettype());  
                // 把每个数据当作一对象添加到数组里  
                jsonarray.put(jsonObj);//向json数组里面添加pet对象  
                object.put("pet", jsonarray);//向总对象里面添加包含pet的数组  
                            jsonresult = object.toString();//生成返回字符串  
            } catch (JSONException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
            LogI("生成的json串为:"+jsonresult);  
            return jsonresult;  
        }  
     
    最后生成结果为:{"pet":[{"petid":100,"petname":"name1","pettype":"type1"}]}
     
    当然,如果我们想生成多个对象,那么只需要多调用几次
     
    [java] 
    jsonarray.put(jsonObj);//向json数组里面添加pet对象  
    这个方法就可以了。
    另外对于最外层的object我们可以这样去理解,实际上我们生成的是
     
    object{
     
    List list;
     
    }
     
    这样的类型,只不过最外面的object我们看不到而已。
    二、解析json串
     
    其实解析和生成是相对应的,怎么样生成的,那么就应该怎么样返过来解析
     
    传入的json={"pet":[{"petid":100,"petname":"name1","pettype":"type1"}]}
     
    [java]  
    public Pet jsonToPet(String json){  
            if(json.startsWith("error")){//这里可以做一下检测,如果不是json格式的就直接返回  
                return null;  
            }  
            Pet pet=new Pet();//准备返回的pet对象  
            try {  
                JSONObject jsonObject=new JSONObject(json);//我们需要把json串看成一个大的对象  
                JSONArray jsonArray=jsonObject.getJSONArray("pet");//这里获取的是装载有所有pet对象的数组  
                JSONObject jsonpet = jsonArray.getJSONObject(0);//获取这个数组中第一个pet对象  
                  
                String petid=jsonpet.getString("petid");//获取pet对象的参数  
                String petname=jsonpet.getString("petname");  
                String pettype=jsonpet.getString("pettype");  
                  
                pet.setPetid(petid);//把参数添加到pet对象当中。  
                pet.setPetid(petname);  
                pet.setPetid(pettype);  
            } catch (JSONException e) {  
                e.printStackTrace();  
            }  
            LogI("json To Pet:"+pet.toString());//打印出pet对象参数。  
            return pet;  
        }  
     
    三、总结
    其实json串的解析是很简单的,当然本文章中我之举了一个最简单的例子。实际应用中传入的json串并不是标准的。有可能是:[{"petid":100,"petname":"name1","pettype":"type1"}]这样的,那么对于这样的很明显这是一个数组形式,那么我们就直接用
     
    [java]  
    JSONArray jsonArray=new JSONArray(json);  
    来解析就可以了。
     
    当然具体的形式还有很多种,但是我们只要分清对象和数组这个相互包含的概念,就一定能够解析出来。
  • 相关阅读:
    自己写的asp日历控件
    处处留心皆学问
    模块化闲谈
    原理……
    DIV和SPAN的区别
    javascript学习感触
    CSS 匹配顺序
    配置闲谈
    找到的一个读取shape数据的代码
    问题和收获
  • 原文地址:https://www.cnblogs.com/laughingQing/p/4547786.html
Copyright © 2011-2022 走看看