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] 
    <span style="font-size:18px">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;  
        }</span>  
     
    最后生成结果为:{"pet":[{"petid":100,"petname":"name1","pettype":"type1"}]}
     
    当然,如果我们想生成多个对象,那么只需要多调用几次
     
    [java] 
    <span style="font-size:18px">jsonarray.put(jsonObj);//向json数组里面添加pet对象</span>  
    这个方法就可以了。
    另外对于最外层的object我们可以这样去理解,实际上我们生成的是
     
    object{
     
    List<pet> list;
     
    }
     
    这样的类型,只不过最外面的object我们看不到而已。
    二、解析json串
     
    其实解析和生成是相对应的,怎么样生成的,那么就应该怎么样返过来解析
     
    传入的json={"pet":[{"petid":100,"petname":"name1","pettype":"type1"}]}
     
    [java]  
    <span style="font-size:18px">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;  
        }</span>  
     
    三、总结
    其实json串的解析是很简单的,当然本文章中我之举了一个最简单的例子。实际应用中传入的json串并不是标准的。有可能是:[{"petid":100,"petname":"name1","pettype":"type1"}]这样的,那么对于这样的很明显这是一个数组形式,那么我们就直接用
     
    [java]  
    <span style="font-size:18px">JSONArray jsonArray=new </span><span style="font-size:18px">JSONArray</span><span style="font-size:18px">(json);</span>  
    来解析就可以了。
     
    当然具体的形式还有很多种,但是我们只要分清对象和数组这个相互包含的概念,就一定能够解析出来。
     
    转载:http://www.2cto.com/kf/201309/244866.html
  • 相关阅读:
    LeetCode OJ String to Integer (atoi) 字符串转数字
    HDU 1005 Number Sequence(AC代码)
    HDU 1004 Let the Balloon Rise(AC代码)
    HDU 1003 Max Sum(AC代码)
    012 Integer to Roman 整数转换成罗马数字
    011 Container With Most Water 盛最多水的容器
    010 Regular Expression Matching 正则表达式匹配
    007 Reverse Integer 旋转整数
    006 ZigZag Conversion
    005 Longest Palindromic Substring 最长回文子串
  • 原文地址:https://www.cnblogs.com/ycxyyzw/p/3812787.html
Copyright © 2011-2022 走看看