当前位置: 首页 > news >正文

android下基本json串的生成与解析

以前就用过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(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"}]这样的,那么对于这样的很明显这是一个数组形式,那么我们就直接用

JSONArray jsonArray=new JSONArray(json);

来解析就可以了。

当然具体的形式还有很多种,但是我们只要分清对象和数组这个相互包含的概念,就一定能够解析出来。



本文为原创,欢迎转载,但希望亲们转载的时候带一下源链接。


相关文章:

  • FileZilla无法连接ftp服务器的解决方案
  • nginx编译安装报错src/os/unix/ngx_files.c: In function 鈔gx_write_chain_to_file?
  • WiFi基本知识
  • nginx配置DocumentRoot
  • 黑马程序员_StringBuffer,包装类
  • 【Android病毒分析报告】 - ZooTiger “集恶意推广、隐私窃取、恶意吸费于一体”...
  • windows下如何用wireshark抓本地回路抓包
  • 知道版本对于出0day后批量攻击dedecms有非常大的帮助,先判断版本再选择相应exp,效率大增...
  • 如何让Windows Server 2008服务器支持被动模式
  • 如何诊断crs 安装时 root.sh 脚本执行错误
  • 站长
  • webshell 匿名用户(入侵者)
  • 中国象棋程序的设计与实现–楚汉棋兵(高级版)(源码)
  • 简单排序
  • ios开发之再谈设计模式
  • js ES6 求数组的交集,并集,还有差集
  • maya建模与骨骼动画快速实现人工鱼
  • Mysql5.6主从复制
  • MySQL用户中的%到底包不包括localhost?
  • nodejs实现webservice问题总结
  • oldjun 检测网站的经验
  • Redis中的lru算法实现
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Spring Cloud中负载均衡器概览
  • vue-router的history模式发布配置
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 第2章 网络文档
  • 分布式事物理论与实践
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 前端面试题总结
  • 容器服务kubernetes弹性伸缩高级用法
  • 通过git安装npm私有模块
  • 微服务核心架构梳理
  • 学习笔记:对象,原型和继承(1)
  • 追踪解析 FutureTask 源码
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #include<初见C语言之指针(5)>
  • (003)SlickEdit Unity的补全
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • .bat文件调用java类的main方法
  • .net 后台导出excel ,word
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .NET下的多线程编程—1-线程机制概述
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • @WebServiceClient注解,wsdlLocation 可配置
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具