以前就用过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);  
来解析就可以了。
 
当然具体的形式还有很多种,但是我们只要分清对象和数组这个相互包含的概念,就一定能够解析出来。

android下基本json串的生成与解析的更多相关文章

  1. Android 下使用 JSON 实现 HTTP 请求

    不得不说,JSON 格式的确是非常美妙的,速度快而且简化了很多操作在 Android 下,Android SDK 已经为我们封装好了整个与 JSON 有关的操作,使用非常方便 以下就是一个标准的 JS ...

  2. Android 下使用 JSON 实现 HTTP 请求,外加几个示例!

    不得不说,JSON 格式的确是非常美妙的,速度快而且简化了很多操作在 Android 下,Android SDK 已经为我们封装好了整个与 JSON 有关的操作,使用非常方便 以下就是一个标准的 JS ...

  3. Java开发笔记(一百零八)JSON串的定义和解析

    前面提到URL尾巴支持添加请求参数,具体格式形如“参数A名称=A参数值&参数B名称=B参数值”,可是这种格式只能传递简单的键值对信息,不能传递结构化数据,也无法传递数组形式的参数,因而它不适用 ...

  4. JSON数据的生成与解析

    JSON数据的生成与解析.首先先到网上下载一个json jar包,我用的是org.json 演示样例代码: package json; import org.json.JSONArray; impor ...

  5. Android中XML文件的序列化生成与解析

    xml文件是非常常用的,在android中json和xml是非常常用的两种封装数据的形式,从服务器中获取数据也经常是这两种形式的,所以学会生成和解析xml和json是非常有用的,json相对来说是比较 ...

  6. Android学习记录(1)—Android中XML文件的序列化生成与解析

    xml文件是非常常用的,在android中json和xml是非常常用的两种封装数据的形式,从服务器中获取数据也经常是这两种形式的,所以学会生成和解析xml和json是非常有用的,json相对来说是比较 ...

  7. Android zxing实现二维码生成和解析

    二维码的生成与解析.有多种途径.我选择用大品牌,google老大的zxing. gitHub链接是(我用的3.0.0,已经是nio了) https://github.com/zxing/zxing/t ...

  8. go对json对象的生成和解析

    https://blog.csdn.net/benben_2015/article/details/78917374

  9. json串反转义(消除反斜杠)-- 转载

    JSon串在被串行化后保存在文件中,读取字符串时,是不能直接拿来用JSON.parse()解析为JSON  对象的.因为它是一个字符串,不是一个合法的JSON对象格式.例如下面的JSON串保存在文件中 ...

随机推荐

  1. [ios][opengles]opengles纹理贴图

    参考:http://www.cnblogs.com/andyque/archive/2011/09/02/2155061.html

  2. C/C++获取数组的长度

    C.C++中没有提供 直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取长度,那么对于其他类型的数组如何获取他们的长度呢?其中一种方法是使 用sizeof(array) / ...

  3. 通过URl将服务器的图片下载到本地并压缩

    private void downloadServerPic(final String url1) { new Thread() { @Override public void run() { // ...

  4. python-django 模型model字段类型说明

    V=models.CharField(max_length=None<, **options>) #varchar V=models.EmailField(<max_length=7 ...

  5. Expanding Rods(二分POJ1905)

    Expanding Rods Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 13688   Accepted: 3527 D ...

  6. Linux sync命令的作用

    adb shell sync 写缓存命令——sync 在用reboot命令启动unix系统后,系统提示出错信息,部分应用程序不能正常工作.经仔细检查系统文件,并和初始的正确备份进行比较,发现某些文件确 ...

  7. javascript实现二分查找

    今天做了道笔试题,要求是实现二分查找,当然不难,想了一下,因为没有要求语言就用javascript实现了.当然,期间还是出来了一点问题. ok,上代码 /* * 稳定二分查找 * 作者:吴伟欣 * * ...

  8. c语言中函数调用的本质从汇编角度分析

    今天下午写篇博客吧,分析分析c语言中函数调用的本质,首先我们知道c语言中函数的本质就是一段代码,但是给这段代码起了一个名字,这个名字就是他的的这段代码的开始地址 这也是函数名的本质,其实也就是汇编中的 ...

  9. 用Maonry如何实现UIScrollView

    一,使用UIScrollView 与其他View 布局不同的地方在于, ScrollView的高度/宽度不固定: ScrollView的高度和宽度由其内容决定(即 Scroll View 的 cont ...

  10. Linux系统下修改环境变量PATH路径的三种方法

    这里介绍Linux的知识,比如把/etc/apache/bin目录添加到PATH中有三种方法,看完之后你将学会Linux系统下如何修改环境变量PATH路径,需要的朋友可以参考下 电脑中必不可少的就是操 ...