以前就用过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. c# 小练习

    double a = double.Parse( this.textBox1.Text); double b = double.Parse(this.textBox2.Text); double c ...

  3. MVC设计模式下实现数据库的连接,并获取所有数据到浏览器页面上显示

    实现建立一个学生的java类:里面封装了属性的全部属性: public class Student { private int id; private String username; private ...

  4. U3D刚体测试3(constraints)

    程序这边的接口: mRigidbody.constraints = RigidbodyConstraints.FreezePositionX | RigidbodyConstraints.Freeze ...

  5. PowerShell调用jira rest api实现jira统计自动化

    通过调用JIRA Rest web api实现统计自动化,首先进行登录模拟: $content = @{username='用户名';password='密码'} $JSON=$content|con ...

  6. WPFのTopMost属性的应用

    最近做一个东西,需要用到多个子窗体层级关系,首先,有一个MainWindow,然后有一个win1和win2甚至更多,我需要达到的控制是,win1选为focus的时候,win2在win1的上面,TopM ...

  7. Mysql-学习笔记(==》增删主键建立索引 七)

    SHOW FULL COLUMNS FROM teacher; -- 增加删除主键 alterCREATE TABLE tt(t INT);ALTER TABLE tt ADD CONSTRAINT ...

  8. 如何重置CentOS/RHEL 7中遗忘的根用户帐户密码

    你有没有遇到过这种情况:想不起来Linux系统上的用户帐户密码?要是你忘了根用户密码,情况就更为糟糕.你无法执行任何面向整个系统的变更.要是你忘了用户密码,很容易使用根帐户来重置密码. 可要是你忘了根 ...

  9. 无缝漫游 Seamless Roaming

    点击打开链接 如你在由一个以上AP组成的Wifi 无线网中,拿著一部WindowXP 笔记本电脑,乘著汽车在Wifi网中往来,不断通过无线卡Ping 一个目標,你会发现在无线卡过站时,掉包可以高达半分 ...

  10. 起点CG原创教程——digicel.FlipBook.6教程

    http://blog.renren.com/blog/262793929/473221163