json生成和解析

android下基本json串的生成与解析
2013-09-18 15:38:37 我来说两句 作者:失落夏天
收藏 我要投稿
以前就用过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>
来解析就可以了。
当然具体的形式还有很多种,但是我们只要分清对象和数组这个相互包含的概念,就一定能够解析出来。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web应用程序之间的数据传输。在解析JSON文件时,可以使用不同的编程语言和库。 以下是一些常见的JSON解析方法: 1. Java中使用GSON库 GSON是Google提供的Java库,可以将JSON数据转换为Java对象,也可以将Java对象转换为JSON数据。 ```java // 将JSON字符串转换为Java对象 Gson gson = new Gson(); MyObject myObject = gson.fromJson(jsonString, MyObject.class); // 将Java对象转换为JSON字符串 String jsonString = gson.toJson(myObject); ``` 2. Python中使用json模块 Python标准库中的json模块提供了解析生成JSON数据的方法。 ```python import json # 将JSON字符串转换为Python对象 pythonObject = json.loads(jsonString) # 将Python对象转换为JSON字符串 jsonString = json.dumps(pythonObject) ``` 3. JavaScript中使用JSON对象 JavaScript中的JSON对象提供了解析生成JSON数据的方法。 ```javascript // 将JSON字符串转换为JavaScript对象 var jsonObject = JSON.parse(jsonString); // 将JavaScript对象转换为JSON字符串 var jsonString = JSON.stringify(jsonObject); ``` 4. PHP中使用json_decode和json_encode函数 PHP中的json_decode函数可以将JSON数据转换为PHP对象或数组,json_encode函数可以将PHP对象或数组转换为JSON数据。 ```php // 将JSON字符串转换为PHP对象 $phpObject = json_decode($jsonString); // 将PHP对象转换为JSON字符串 $jsonString = json_encode($phpObject); ``` 以上是一些常见的JSON解析方法,不同的编程语言和库可能有一些差异,但大体上都是类似的。在实际应用中,可以根据具体需求选择适合自己的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值