您的位置:首页 > Web前端 > JavaScript

Gson的使用

2015-11-23 18:14 531 查看
之前的一篇文章。写了如何使用android自带的json解析库来解析使用json数据。下面我们来看另一个很好的json解析库。这个解析库是google开源的。他就是Gson

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息