Gson的使用
2015-11-23 18:14
531 查看
之前的一篇文章。写了如何使用android自带的json解析库来解析使用json数据。下面我们来看另一个很好的json解析库。这个解析库是google开源的。他就是Gson
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行转换的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,将java对象转换成Json字符串。
上面就是Gson的简单解释。
下面我们就开始来使用Gson
https://github.com/google/gson
下载下来之后。解压。我们就可以看到下载了一堆东西。
就像上面图片上一样。 不过我们只需要gson这个文件夹 就可以了。
我们就看到了。gson的源代码就粘贴到我们创建的Gson java项目里了。
记得要选择1.6 这个很重要。否则很容易就会出现
Conversion to Dalvik format failed: Unable to execute
这个蛋疼的错误。
好了。经过以上的步骤。我们已经成功的生成了一个gson.jar文件。
在MainActivity里。添加下面的代码。
上面这函数的代码。演示了怎么去使用java实体类对象创建json数据字符串。以及使用Gson单独的添加json字段。
下面我们来看看输出的结果。
然后下面。我们来看看怎么去用Gson解析json字符串。
在MainActivity中添加下面的代码。
由于json字符串需要内部有双引号。以及代码字符串外部的双引号问题。我都给添加了反斜线转义字符。同时又为了方便大家的使用。我给上面留了一行添加转义字符的注释行。大家把代码拷贝下去。只需要把下面一行错误的注释、上面一行被注释的注释打开。就可以了。
这里。演示了gson的很多功能。例如往json对象里添加数据、 往jsonArray集合里添加数据。以及将jsonArray转换成java的集合List 以及将jsonObject转换成JavaBean 以及单独的解析int类型值、String类型值、等。
好了。上一下这个的结果图。
好了。带领大家一起飞的时间就要结束了。欢乐的时光总是那么的短暂。关于json的其他不明白的东西。可以看看我之前的一篇文章。那里有对json更详细的解释。
同时。Gson 创建出来的JsonObject可以像操作JAVA对象一样操作json数据。
JsonElement 就是Gson这里的节点。这个节点可以转换成各种json数据类型。转换方式就如同上面代码里写的。getAsInt(); getAsString() getAsJsonObject() 、、、等。自行可以吧代码提示按出来。自己看看。
by brok1n 20151123
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行转换的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,将java对象转换成Json字符串。
上面就是Gson的简单解释。
下面我们就开始来使用Gson
第一步 下载
Gson 被google发布到了github上。我们可以在github上下载下来https://github.com/google/gson
下载下来之后。解压。我们就可以看到下载了一堆东西。
就像上面图片上一样。 不过我们只需要gson这个文件夹 就可以了。
第二步 生成gson.jar 包
我们打开gson这个文件夹。看到了pom.xml 大概明白了。这是个maven项目。但是我这里eclipse没有maven环境。也懒得为了生成一个jar包去下载、配置maven 哈哈。是有点懒。不过我其他没有什么地方用到maven 。所以这里我就说一种不用maven生成gson.jar包的方式。 知道的,有maven环境的可以略过 自行生成gson.jar包。 下面。来、摆好姿势。跟着我的节奏一起来。一:
我们找到解压好的gson文件夹.二:
我们打开eclipse 创建一个Java 项目 记住 是Java Project三:
我们回到解压的gson文件夹。依次打开 gson/src/main/java/这个目录下,我们看到了一个com文件夹。我们复制这个文件夹。然后回到eclipse右击我们新建的Gson项目的src文件夹,选择paste 粘贴到这里。我们就看到了。gson的源代码就粘贴到我们创建的Gson java项目里了。
四:
配置Gson项目的java编译版本 ,右击Gson这个项目 选择 properties记得要选择1.6 这个很重要。否则很容易就会出现
Conversion to Dalvik format failed: Unable to execute
这个蛋疼的错误。
五:
没有报错。然后就直接export 到出成jar包。 就生成了我们需要的gson.jar文件了。好了。经过以上的步骤。我们已经成功的生成了一个gson.jar文件。
第三步 使用
首先就是创建一个android项目。在MainActivity里。添加下面的代码。
private Gson mGson = new Gson(); /** * @author brok1n * 方法名称:encodeJson * 描述:TODO(创建json数据) * 创建时间:2015年11月23日 下午2:49:08 * void */ private void encodeJson() { /** * ------------------------- * 使用实体类对象、集合 生成json数据字符串 * ------------------------- * */ List< UserBean > list = new ArrayList< UserBean >(); for ( int i = 0; i < 5; i++ ) { // 用户实体 UserBean userBean = new UserBean(); userBean.setUserName( "brok1n" + i ); userBean.setPassword( "123456" + i ); userBean.setSex( 1 + i ); // 生日实体 Birthday birthday = new Birthday(); birthday.setYear( 1998 + i ); birthday.setMonth( 2 + i ); birthday.setDay( 8 + i ); userBean.setBirthday( birthday ); list.add( userBean ); } String userBeanJsonStr = mGson.toJson( list ); Log.e( "GsonDemo userBean", userBeanJsonStr ); /** * 以上就是使用 实体类对象 利用Gson 生成字符串的使用方法 * ----------------------------- * 下面是 利用Gson将单一字段来组织成Json字符串 * */ JsonArray array = new JsonArray(); for ( int i = 0; i < 5; i++ ) { //创建User用户数据json对象 JsonObject jsonObject =new JsonObject(); //下面演示了 向jsonObject里添加数据的两种方法。 // addProperty 和add 大家根据下面的例子、斟酌自己需要用哪个。 jsonObject.addProperty( "userName", "张三" + i ); jsonObject.add( "password", new JsonPrimitive( "123456" + i ) ); jsonObject.addProperty( "sex", new Integer( 1 + i ) ); //创建birthday对象 JsonObject birthday = new JsonObject(); birthday.addProperty( "year", new Integer( 1998 + i ) ); birthday.addProperty( "month", new Integer( 4 + i ) ); birthday.addProperty( "day", new Integer( 8 + i ) ); //将birthday添加到user对象 jsonObject.add( "birthday", birthday ); //将这个user对象添加到数组 jsonArray array.add( jsonObject ); } Log.e( "GsonDemo add", array.toString() ); }
上面这函数的代码。演示了怎么去使用java实体类对象创建json数据字符串。以及使用Gson单独的添加json字段。
下面我们来看看输出的结果。
11-23 17:58:28.479: E/GsonDemo userBean(8291): [{"birthday":{"day":8,"month":2,"year":1998},"password":"1234560","userName":"brok1n0","sex":1},{"birthday":{"day":9,"month":3,"year":1999},"password":"1234561","userName":"brok1n1","sex":2},{"birthday":{"day":10,"month":4,"year":2000},"password":"1234562","userName":"brok1n2","sex":3},{"birthday":{"day":11,"month":5,"year":2001},"password":"1234563","userName":"brok1n3","sex":4},{"birthday":{"day":12,"month":6,"year":2002},"password":"1234564","userName":"brok1n4","sex":5}] 11-23 17:58:28.489: E/GsonDemo add(8291): [{"userName":"张三0","password":"1234560","sex":1,"birthday":{"year":1998,"month":4,"day":8}},{"userName":"张三1","password":"1234561","sex":2,"birthday":{"year":1999,"month":5,"day":9}},{"userName":"张三2","password":"1234562","sex":3,"birthday":{"year":2000,"month":6,"day":10}},{"userName":"张三3","password":"1234563","sex":4,"birthday":{"year":2001,"month":7,"day":11}},{"userName":"张三4","password":"1234564","sex":5,"birthday":{"year":2002,"month":8,"day":12}}]
然后下面。我们来看看怎么去用Gson解析json字符串。
在MainActivity中添加下面的代码。
/** * @author brok1n * 方法名称:decodeJson * 描述:TODO(解析json数据) * 创建时间:2015年11月23日 下午2:48:53 * void */ private void decodeJson() { /** * ------------------------- * 使用json字符串 生成实体类对象、集合 * ------------------------- * */ //这里模拟从服务器获取到的jsonArray 数据 //String jsonStr = "[{\"birthday\":{\"day\":8,\"month\":2,\"year\":1998},\"password\":\"1234560\",\"userName\":\"brok1n0\",\"sex\":1},{\"birthday\":{\"day\":9,\"month\":3,\"year\":1999},\"password\":\"1234561\",\"userName\":\"brok1n1\",\"sex\":2},{\"birthday\":{\"day\":10,\"month\":4,\"year\":2000},\"password\":\"1234562\",\"userName\":\"brok1n2\",\"sex\":3},{\"birthday\":{\"day\":11,\"month\":5,\"year\":2001},\"password\":\"1234563\",\"userName\":\"brok1n3\",\"sex\":4}]"; String jsonStr = "[{"birthday":{"day":8,"month":2,"year":1998},"password":"1234560","userName":"brok1n0","sex":1},{"birthday":{"day":9,"month":3,"year":1999},"password":"1234561","userName":"brok1n1","sex":2},{"birthday":{"day":10,"month":4,"year":2000},"password":"1234562","userName":"brok1n2","sex":3},{"birthday":{"day":11,"month":5,"year":2001},"password":"1234563","userName":"brok1n3","sex":4}]"; //定义要解析的类型 Type type = new TypeToken<List<UserBean>>(){}.getType(); //吧jsonArray字符串解析成List集合 在程序里就可以直接使用。 List< UserBean > list = mGson.fromJson( jsonStr , type ); Log.e( "GsonDemo parse List", list.toString() ); /** * ------------------------- * 下面是将jsonObject类型数据字符串。使用Gson直接转换成JavaBean 实体类对象 * */ //String userStr = "{\"birthday\":{\"day\":8,\"month\":2,\"year\":1998},\"password\":\"1234560\",\"userName\":\"brok1n0\",\"sex\":1}"; String userStr = "{\"birthday\":{"day":8,"month":2,"year":1998},"password":"1234560","userName":"brok1n0","sex":1}"; UserBean userBean = mGson.fromJson( userStr, UserBean.class ); Log.e( "GsonDemo parse JavaBean", userBean.toString() ); /** * ------------------------ * 下面是使用gson 解析单个的字段 * */ //解析JsonObject //String objStr = "{\"like\":[\"唱歌\", \"旅游\"],\"birthday\":{\"day\":8,\"month\":2,\"year\":1998},\"password\":\"1234560\",\"userName\":\"brok1n0\",\"sex\":1}"; String objStr = "{"like":["唱歌", "旅游"],"birthday":{"day":8,"month":2,"year":1998},"password":"1234560","userName":"brok1n0","sex":1}"; JsonObject jsonObject = mJsonParser.parse( objStr ).getAsJsonObject(); //取String类型的字段 String userName = jsonObject.get( "userName" ).getAsString(); Log.e( "GsonDemo parse String attribute", "userName:" + userName ); //取int类型的字段 int sex = jsonObject.get( "sex" ).getAsInt(); Log.e( "GsonDemo parse int attribute", "sex:" + sex ); //取jsonObject类型的字段 两种方式 JsonObject birthday = jsonObject.get( "birthday" ).getAsJsonObject(); JsonObject birthday1 = jsonObject.getAsJsonObject( "birthday" ); Log.e( "GsonDemo parse object attribute", "birthday:" + mGson.toJson( birthday ) + " birthday1:" + mGson.toJson( birthday1 ) ); //取jsonArray JsonArray like = jsonObject.get( "like" ).getAsJsonArray(); JsonArray like1 = jsonObject.getAsJsonArray( "like" ); //这里演示了直接用Json对象添加字段。jsonObject添加字段和可以在encodeJson()里查看 like.add( "喝酒" ); like.add( "吃黄焖鸡米饭" ); //这里创建了一个JsonArray类型的数据 JsonArray childLike = new JsonArray(); childLike.add( "吃饭" ); childLike.add( "睡觉" ); childLike.add( "打豆豆" ); //将这个JsonArray类型数据当做like这个JsonArray中的一个节点添加进去 like.add( childLike ); //创建一个JsonObject 并添加到like这个JsonArray中 JsonObject childObj = new JsonObject(); childObj.addProperty( "smoking", new Integer( 0 ) ); childObj.addProperty( "color", "蓝色" ); like.add( childObj ); Log.e( "GsonDemo parse array attribute", "like:" + mGson.toJson( like ) + " like1:" + mGson.toJson( like1 ) ); /** * 以上就是Gson解析数据的所有用法。当然这是目前我所使用过的。 * -------------------------- * */ }
由于json字符串需要内部有双引号。以及代码字符串外部的双引号问题。我都给添加了反斜线转义字符。同时又为了方便大家的使用。我给上面留了一行添加转义字符的注释行。大家把代码拷贝下去。只需要把下面一行错误的注释、上面一行被注释的注释打开。就可以了。
这里。演示了gson的很多功能。例如往json对象里添加数据、 往jsonArray集合里添加数据。以及将jsonArray转换成java的集合List 以及将jsonObject转换成JavaBean 以及单独的解析int类型值、String类型值、等。
好了。上一下这个的结果图。
11-23 18:05:53.549: E/GsonDemo parse List(9041): [UserBean [userName=brok1n0, password=1234560, sex=1, birthday=Birthday [year=1998, month=2, day=8]], UserBean [userName=brok1n1, password=1234561, sex=2, birthday=Birthday [year=1999, month=3, day=9]], UserBean [userName=brok1n2, password=1234562, sex=3, birthday=Birthday [year=2000, month=4, day=10]], UserBean [userName=brok1n3, password=1234563, sex=4, birthday=Birthday [year=2001, month=5, day=11]]] 11-23 18:05:53.549: E/GsonDemo parse JavaBean(9041): UserBean [userName=brok1n0, password=1234560, sex=1, birthday=Birthday [year=1998, month=2, day=8]] 11-23 18:05:53.559: E/GsonDemo parse String attribute(9041): userName:brok1n0 11-23 18:05:53.559: E/GsonDemo parse int attribute(9041): sex:1 11-23 18:05:53.569: E/GsonDemo parse object attribute(9041): birthday:{"day":8,"month":2,"year":1998} birthday1:{"day":8,"month":2,"year":1998} 11-23 18:05:53.569: E/GsonDemo parse array attribute(9041): like:["唱歌","旅游","喝酒","吃黄焖鸡米饭",["吃饭","睡觉","打豆豆"],{"smoking":0,"color":"蓝色"}] like1:["唱歌","旅游","喝酒","吃黄焖鸡米饭",["吃饭","睡觉","打豆豆"],{"smoking":0,"color":"蓝色"}]
好了。带领大家一起飞的时间就要结束了。欢乐的时光总是那么的短暂。关于json的其他不明白的东西。可以看看我之前的一篇文章。那里有对json更详细的解释。
同时。Gson 创建出来的JsonObject可以像操作JAVA对象一样操作json数据。
JsonElement 就是Gson这里的节点。这个节点可以转换成各种json数据类型。转换方式就如同上面代码里写的。getAsInt(); getAsString() getAsJsonObject() 、、、等。自行可以吧代码提示按出来。自己看看。
by brok1n 20151123
相关文章推荐
- Gson.toJson()时内存溢出StackOverflowError
- XML 与 JSON 优劣对比
- VBA将excel数据表生成JSON文件
- newtonsoft.json解析天气数据出错解决方法
- vbs 解析json jsonp的方法
- Extjs4如何处理后台json数据中日期和时间
- C#实现将类的内容写成JSON格式字符串的方法
- JQuery ajax返回JSON时的处理方式 (三种方式)
- jquery JSON的解析方式示例介绍
- c#版json数据解析示例分享
- ASP JSON类文件的使用方法
- C#实现对Json字符串处理实例
- C#实现Json转Unicode的方法
- php解析json数据实例
- PHP中JSON的应用技巧
- PHP6 先修班 JSON实例代码
- 关于JSON以及JSON在PHP中的应用技巧
- .Net中的json操作类用法分析
- C#操作 JSON方法汇总
- JavaScript中字符串(string)转json的2种方法