Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象。
Gson里最重要的对象有2个Gson 和GsonBuilder。
Gson有2个最基本的方法
1) toJson() – 转换java 对象到JSON
2) fromJson() – 转换JSON到java对象
注意使用Gson时记得添加第三方类库gson-1.6.jar
main.xml布局文件
<?
xml version
=
"
1.0
"
encoding
=
"
utf-8
"
?>
<
LinearLayout xmlns:android
=
"
http://schemas.android.com/apk/res/android
"
android:orientation
=
"
vertical
"
android:layout_width
=
"
fill_parent
"
android:layout_height
=
"
fill_parent
"
>
<
Button android:id
=
"
@+id/btn01
"
android:layout_width
=
"
fill_parent
"
android:layout_height
=
"
wrap_content
"
android:gravity
=
"
center_horizontal
"
android:text
=
"
开始解析01
"
/>
<
Button android:id
=
"
@+id/btn02
"
android:layout_width
=
"
fill_parent
"
android:layout_height
=
"
wrap_content
"
android:gravity
=
"
center_horizontal
"
android:text
=
"
开始解析02
"
/>
<
Button android:id
=
"
@+id/btn03
"
android:layout_width
=
"
fill_parent
"
android:layout_height
=
"
wrap_content
"
android:gravity
=
"
center_horizontal
"
android:text
=
"
开始解析03
"
/>
<
Button android:id
=
"
@+id/btn04
"
android:layout_width
=
"
fill_parent
"
android:layout_height
=
"
wrap_content
"
android:gravity
=
"
center_horizontal
"
android:text
=
"
JavaToJson
"
/>
<
Button android:id
=
"
@+id/btn05
"
android:layout_width
=
"
fill_parent
"
android:layout_height
=
"
wrap_content
"
android:gravity
=
"
center_horizontal
"
android:text
=
"
把对象的属性转换成json的名字
"
/>
</
LinearLayout
>
实体类User
package
com.ljq.json;
import
com.google.gson.annotations.SerializedName;
public
class
User {
//
将java对象的属性转换成指定的json名字
@SerializedName(
"
username
"
)
private
String name;
private
int
age;
public
User() {
super
();
}
public
User(String name,
int
age) {
super
();
this
.name
=
name;
this
.age
=
age;
}
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name
=
name;
}
public
int
getAge() {
return
age;
}
public
void
setAge(
int
age) {
this
.age
=
age;
}
}
工具类JsonUtils
package
com.ljq.json;
import
java.io.StringReader;
import
java.lang.reflect.Type;
import
java.util.Iterator;
import
java.util.LinkedList;
import
com.google.gson.Gson;
import
com.google.gson.reflect.TypeToken;
import
com.google.gson.stream.JsonReader;
public
class
JsonUtils {
public
void
parseJson01(String jsonData){
try
{
//
解析json对象首先要生产一个JsonReader对象
JsonReader reader
=
new
JsonReader(
new
StringReader(jsonData));
reader.beginArray();
while
(reader.hasNext()){
reader.beginObject();
while
(reader.hasNext()){
String tagName
=
reader.nextName();
if
(
"
name
"
.equals(tagName)){
System.out.println(
"
name--->
"
+
reader.nextString());
}
else
if
(
"
age
"
.equals(tagName)){
System.out.println(
"
age--->
"
+
reader.nextInt());
}
}
reader.endObject();
}
reader.endArray();
}
catch
(Exception e) {
e.printStackTrace();
}
}
public
void
parseJson02(String jsonData){
Gson gson
=
new
Gson();
User user
=
gson.fromJson(jsonData, User.
class
);
System.out.println(
"
name--->
"
+
user.getName());
System.out.println(
"
age---->
"
+
user.getAge());
}
public
void
parseJson03(String jsonData){
Type listType
=
new
TypeToken
<
LinkedList
<
User
>>
(){}.getType();
Gson gson
=
new
Gson();
LinkedList
<
User
>
users
=
gson.fromJson(jsonData, listType);
for
(User user:users){
System.out.println(
"
name--->
"
+
user.getName());
System.out.println(
"
age---->
"
+
user.getAge());
}
System.out.println(
"
==================
"
);
for
(Iterator iterator
=
users.iterator(); iterator.hasNext();) {
User user
=
(User) iterator.next();
System.out.println(
"
name--->
"
+
user.getName());
System.out.println(
"
age---->
"
+
user.getAge());
}
}
}
JsonActivity
package
com.ljq.json;
import
com.google.gson.FieldNamingPolicy;
import
com.google.gson.Gson;
import
com.google.gson.GsonBuilder;
import
android.app.Activity;
import
android.os.Bundle;
import
android.view.View;
import
android.widget.Button;
public
class
JsonActivity
extends
Activity {
private
Button btn01
=
null
;
private
Button btn02
=
null
;
private
Button btn03
=
null
;
private
Button btn04
=
null
;
private
Button btn05
=
null
;
private
String jsonData01
=
"
[{\"name\":\"Michael\",\"age\":20},{\"name\":\"Mike\",\"age\":21}]
"
;
private
String jsonData02
=
"
{\"name\":\"Michael\",\"age\":20}
"
;
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn01
=
(Button)findViewById(R.id.btn01);
btn02
=
(Button)findViewById(R.id.btn02);
btn03
=
(Button)findViewById(R.id.btn03);
btn04
=
(Button)findViewById(R.id.btn04);
btn05
=
(Button)findViewById(R.id.btn05);
btn01.setOnClickListener(listener);
btn02.setOnClickListener(listener);
btn03.setOnClickListener(listener);
btn04.setOnClickListener(listener);
btn05.setOnClickListener(listener);
}
View.OnClickListener listener
=
new
View.OnClickListener(){
public
void
onClick(View v) {
JsonUtils jsonUtils
=
new
JsonUtils();
switch
(v.getId()) {
case
R.id.btn01:
jsonUtils.parseJson01(jsonData01);
break
;
case
R.id.btn02:
jsonUtils.parseJson02(jsonData02);
break
;
case
R.id.btn03:
jsonUtils.parseJson03(jsonData01);
break
;
case
R.id.btn04:
//
把java对象转换成json
User user01
=
new
User(
"
linjiqin
"
,
24
);
Gson gson
=
new
Gson();
String obj
=
gson.toJson(user01);
System.out.println(obj);
//
输出{"name":"linjiqin", "age":24}
break
;
case
R.id.btn05:
//
将java对象的属性转换成指定的json名字
User user02
=
new
User(
"
lintepeng
"
,
22
);
Gson gson2
=
new
GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create();
String obj2
=
gson2.toJson(user02);
System.out.println(obj2);
//
输出{"username":"lintepeng","Age":22}
break
;
}
}
};
}