日期:2014-05-16 浏览次数:20503 次
以前就用过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字符串。
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"}]}
当然,如果我们想生成多个对象,那么只需要多调用几次
jsonarray.put(jsonObj);//向json数组里面添加pet对象
这个方法就可以了。
另外对于最外层的object我们可以这样去理解,实际上我们生成的是
object{
List<pet> list;
}
这样的类型,只不过最外面的object我们看不到而已。二、解析json串
其实解析和生成是相对应的,怎么样生成的,那么就应该怎么样返过来解析
传入的json={"pet":[{"petid":100,"petname":"name1","pettype":"type1"}]}
public Pet jsonToPet(Str