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 ;
}
}
};
}
运行结果