Android解析——json解析为javabean
json的解析,归根结底就是用JsonObject以及JsonArray来实现的。
在日常中,当我们拿到一个较为复杂的json字符串的时候,用以上两个虽然能实现解析,但显得很麻烦。这里介绍下用Gson类来将json解析为javabean。
用两个json字符串来分析:
一、简单json字符串的解析
String JSON_SIMPLE_STRING="{\"sitename\":\"JSON\",\"siteurl\":\"www.kjson.com\",\"keyword\":\"JSON在线校验,格式化JSON,json 在线校验\",\"description\":\"JSON解析\"}";
解析方式:
<span style="white-space:pre"> </span>Gson gson=new Gson();UseBean useBean=gson.fromJson(JSON_SIMPLE_STRING, UseBean.class);System.out.println(useBean.getSitename()+" "+useBean.getSiteurl()+" "+useBean.getKeyword()+" "+useBean.getDescription());
对应的UseBean如下:
package com.bill99;public class UseBean {private String sitename;private String siteurl;private String keyword;private String description;/*** @return the sitename*/public String getSitename() {return sitename;}/*** @param sitename the sitename to set*/public void setSitename(String sitename) {this.sitename = sitename;}/*** @return the siteurl*/public String getSiteurl() {return siteurl;}/*** @param siteurl the siteurl to set*/public void setSiteurl(String siteurl) {this.siteurl = siteurl;}/*** @return the keyword*/public String getKeyword() {return keyword;}/*** @param keyword the keyword to set*/public void setKeyword(String keyword) {this.keyword = keyword;}/*** @return the description*/public String getDescription() {return description;}/*** @param description the description to set*/public void setDescription(String description) {this.description = description;}}
以上是简单的一个json字符串,没有嵌套,全部都是字符串。
二、嵌套json字符串的解析
String JSON_STRING="{\"array\": [ {\"h\":1, \"i\":2,\"j\":3},{\"h\":4, \"i\":5,\"j\":6} ], \"bool\": \"true\", \"number\": 123, \"object\": {\"a\": \"b\",\"c\": \"d\", \"e\": \"f\" }, \"string\": \"Hello World\"}";
这个字符串主要包含了数组以及其他的嵌套。我们用同样的方式可以得到需要的javabean,只是javabean定义较为复杂,代码如下:
<span style="white-space:pre"> </span> MultipleBean multipleBean=gson.fromJson(JSON_STRING, MultipleBean.class);System.out.println(multipleBean.getArray().size());
MultipleBean的定义如下:
package com.bill99;import java.util.List;public class MultipleBean {private List<ArrayBean> array;private String bool;private int number;private object object;private String string;
/*** @return the array*/
public List<ArrayBean> getArray() {return array;
}
/*** @param array the array to set*/
public void setArray(List<ArrayBean> array) {this.array = array;
}
/*** @return the number*/
public int getNumber() {return number;
}
/*** @return the bool*/
public String getBool() {return bool;
}
/*** @param bool the bool to set*/
public void setBool(String bool) {this.bool = bool;
}
/*** @param number the number to set*/
public void setNumber(int number) {this.number = number;
}
/*** @return the string*/
public String getString() {return string;
}
/*** @return the object*/
public object getObject() {return object;
}
/*** @param object the object to set*/
public void setObject(object object) {this.object = object;
}
/*** @param string the string to set*/
public void setString(String string) {this.string = string;
}}
因为MultipleBean中包含其他的类定义,各分别定义bean如下:
package com.bill99;public class ArrayBean {private int h;private int i;private int j;/*** @return the h*/public int getH() {return h;}/*** @param h the h to set*/public void setH(int h) {this.h = h;}/*** @return the i*/public int getI() {return i;}/*** @param i the i to set*/public void setI(int i) {this.i = i;}/*** @return the j*/public int getJ() {return j;}/*** @param j the j to set*/public void setJ(int j) {this.j = j;}}
package com.bill99;public class object {private String a;private String c;private String e;/*** @return the a*/public String getA() {return a;}/*** @param a the a to set*/public void setA(String a) {this.a = a;}/*** @return the c*/public String getC() {return c;}/*** @param c the c to set*/public void setC(String c) {this.c = c;}/*** @return the e*/public String getE() {return e;}/*** @param e the e to set*/public void setE(String e) {this.e = e;}}
三、抽象化
通过以上的两种形式的json字符串解析为javabean。可以看出,绝大部分的json字符串都可以用这样的形式解析为我们需要的javabean,便于代码的后续操作。
在这里可以将以上使用形式抽象化:
/**** 将将对象转换为传入类型的对象* @param * @param object* @param beanClass* @return*/public static <T> T toBean(String json, Class<T> beanClass){Gson gson=new Gson();return (T)gson.fromJson(json, beanClass);}
使用方式:
<span style="white-space:pre"> </span> MultipleBean multipleBean2=toBean(JSON_STRING, MultipleBean.class);System.out.println(multipleBean2.getArray().size());
四、另一种常用的转换HashMap
在json的转换中,有另一种较为常用的转换是:json字符串转为hashmap形式,做法如下:
/**** 将对象转换为HashMap* @param object* @return*/public static HashMap toHashMap(Object object){HashMap<String, Object> data = new HashMap<String, Object>();JSONObject jsonObject = JSONUtils.toJSONObject(object);Iterator it = jsonObject.keys();while (it.hasNext()){String key = String.valueOf(it.next());Object value = jsonObject.get(key);data.put(key, value);}return data;}
五、源码
http://u.download.csdn.net/upload
六、备注
如果觉得写javabean麻烦,有一个简便的方式:用工具自动生成。网址:http://www.bejson.com/json2javapojo/
Android解析——json解析为javabean相关推荐
- android之json解析优化,Android开发之json解析
目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了.感觉java写出来的代码不如python简单明了. 上 ...
- android中json解析及使用(上)
本文整理自:http://www.open-open.com/lib/view/open1326376799874.html 一.JSON的定义 JSON是一种轻量级的数据交换格式,具有良好的可读和便 ...
- 浅谈Android项目----JSON解析(4种解析技术详解)
json简介 1.概念:json全称是javaScript object Notation,是一种并轻量级的数据交换格式. 2.特点: 1.本质就是具有特定格式的字符串 2.json完全独立于编程语言 ...
- Android中JSON解析细解及实例
1.JSON解析 (1).解析Object之一: {"url":"www.cnasda.com"} 解析方法: JSONObject demoJson = ne ...
- android中json解析及使用 (下)
接上文 七.通过JSONTokener来解析json文本 7.1.将json文本解析为对象 我们可以通过JSONTokener的nextValue()来获得JSONObject对象,然后再通过JSON ...
- android的json数据解析,Android数据解析-JSON解析
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,基于JavaScript(Standard ECMA-262 3rd Edition - December ...
- android json教程,Android之JSON解析
编写项目,包含一个Activity.Activity页面效果如下图所示.点击按钮"解析文件1"后解析Json文件json_single并将结果显示在红色框体中,点击按钮" ...
- android中json解析及使用(中)
接上文 六.通过JSONObject与JSONArray来解析json 我们可以通过JSONObject与JSONArray的getInt,getString,getDouble,getJSONArr ...
- [Android开发] Json解析工具类,一个类搞定Json的解析
一.简介 利用递归的方式反射解析到bean里面 二.详细代码 1. Json格式 例如服务器指定规定json格式为: {"code": "--" , // 返回 ...
最新文章
- 简单C++线程池包装类源码示例
- 【javamatlab】以一个简单的例子实现java和matlab混编
- 基于Numpy构建全连接前馈神经网络进行手写数字识别
- xml 和android脚本之家,Android利用Document实现xml读取和写入操作
- ASP.NET编程模型
- 如何在IE/Edge浏览器中巧妙地传输HTA文件?
- oralce load的时候使用触发器会导致load慢吗_一次FGC导致CPU飙高的排查过程
- java线索二叉树的实现_JAVA递归实现线索化二叉树
- 文件复制函数的效率比较
- java 分析图片文字大小时,剔除部分异常数据,思路梳理(格拉布斯准则)
- 矢量网络分析仪--测天线时使用技巧
- 2017年世界各国GDP总值排名预测榜单
- 皇甫兵兵php,段颎 汉 文旅网 - powered by phpwind.net
- 18年6月六级翻译词汇
- poi 操作 PPT,针对 PPTX--图表篇
- LinkedIn Camus实践及踩坑记录
- 拉普拉斯Laplace算子和高斯二阶导核(LOG算子)和SIFT算法
- steam切换账号工具
- 凝思linux操作系统4.2内核版本_凝思linx6.0.76操作系统安装教程
- ESP8266-01S接入机智云物联网平台
热门文章
- LVGL8_Esp32_颜色反转设置-INVERT_COLORS
- Windows命令行取进程路径
- 用 VB 打开任意盘(硬盘/U盘/光盘)的文件.
- IPhone开发三天上手纪实(ZT)
- 蒟蒻のJAVA小窝(关于封装的一些思考)经同意转载
- shell编程之大数据面试题
- 服务器接sata2.5寸硬盘,2.5英寸SATA-3固态硬盘手动安装的详细教程
- 搜索· 真正题材股和蓝筹股
- 收到来自Apple Music Team和Apple Books Team的邮件?
- 从ppt中提取H3C图标库,会有你需要的