以前就用过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. ACM题目————Anagram

    Description You are to write a program that has to generate all possible words from a given set of l ...

  2. 结对2.0--复利计算WEB升级版

    结对2.0--复利计算WEB升级版 复利计算再升级------------------------------------------------------------ 客户在大家的引导下,有了更多 ...

  3. asp.net dropdownlist和listbox

    if (!IsPostBack) { //页面初次加载时执行这里的内容 DataSet ds = new DataSet(); //数据集 ds.Tables.Add("stu") ...

  4. jquery 判断checkbox是否为空的三种方法

    //方法一: if ($("#checkbox-id")get(0).checked) { // do something } //方法二:也适用于单选按钮 if($('#chec ...

  5. java配置自动任务,定期执行代码

    任务调用类: package business.tools.service; import java.util.ArrayList; import java.util.Calendar; import ...

  6. IOS自定义仪表盘

      登录|注册     周海锋 的专栏 Objective-C/Cocos2d/Cocos2d-x/Php/JS       目录视图 摘要视图 订阅 2016软考项目经理实战班    学院周年礼-顶 ...

  7. linux下的./本质

    不知道从什么时候对于./的感觉就是这是一条运行命令,因为你要运行某个文件的时候就用./ 但是这个显然是错误的./表述的是当前目录 .就是表示当前目录的.至于为什么运行当前目录下的 文件需要加上./原因 ...

  8. 四、java中的数组

    总结: 数组的特点: 1.存储的数据类型单一. 2.数组的大小不可变. 3.Arrays工具类.

  9. EXCEL中讲 10分10秒转换成610秒

    前几天宝贝跟我打赌100W说我20天给她打电话不到10小时,我说绝对超过10小时了,但是由于宝贝的赖皮死活不承认,所以我被迫掉出通话记录,拿到通话记录我有点小郁闷,因为通话记录里的时间格式00分00秒 ...

  10. SQL数据库约束行为---防止数据漏填

    防止有些该填的没有填:一.非空约束不能为NULL.操作:在表的设计界面中“允许NULL值”中的复选框去掉. 二.默认值.如果不给列赋值的话,会使用默认值填上.操作:在表的设计界面,选择相应的列,在下面 ...