此demo实现了json数据的解析,有三种解析方式。
demo:下载地址,gson.jar在libs文件夹中,注意添加。
MainActivity.java:
package fk.androiddemo_019;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import java.util.Iterator;
import java.util.LinkedList;
//www。json。org 这是Json的官方网站
//json是一种类似xml的传输,通信用的数据格式
//使用Gson需要你往libs中导入一个gson.jar类库包
public class MainActivity extends Activity implements View.OnClickListener{
//下面的反斜杠是转义字符,为了使Json的""不和android的""冲突
String jsonData="[{\"name\":\"Tom\",\"age\":20},{\"name\":\"Jerry\",\"age\":18}]";
String jsonData2="{\"name\":\"Tom\",\"age\":20}";
Button but1,but2,but3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
but1=(Button)findViewById(R.id.but1);
but1.setOnClickListener(this);
but2=(Button)findViewById(R.id.but2);
but2.setOnClickListener(this);
but3=(Button)findViewById(R.id.but3);
but3.setOnClickListener(this);
}
@Override
public void onClick(View v) {
JsonUtils jsonUtils = new JsonUtils();
if(v==but1) {
jsonUtils.parseJson(jsonData);
}else if(v==but2){
User user=jsonUtils.parseJson2User(jsonData2);
System.out.println("Age=" + user.getAge());
System.out.println("Name="+user.getName());
}else{
LinkedList<User> users=jsonUtils.parseJson2Users(jsonData);
for(Iterator iterator = users.iterator(); iterator.hasNext();){
User user=(User)iterator.next();
System.out.println("Age=" + user.getAge());
System.out.println("Name="+user.getName());
}
}
}
}
User.java:
package fk.androiddemo_019;
/**
* Created by Administrator on 2016/10/6.
*/
public class User {
private String name;
private int 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.java:
package fk.androiddemo_019;
import android.util.JsonReader;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.StringReader;
import java.lang.reflect.Type;
import java.util.LinkedList;
/**
* Created by Administrator on 2016/10/6.
*/
//Json解析工具
public class JsonUtils {
//解析一段json数据
public void parseJson(String jsonData){
try {
JsonReader reader=new JsonReader(new StringReader(jsonData));
reader.beginArray();//开始解析Json数组[]
while(reader.hasNext()){//数组中还有没有对象
reader.beginObject();//开始解析对象{}
while(reader.hasNext()){//对象中还有没有键值对
String key=reader.nextName();//读取下一个键
if(key.equals("name")){
System.out.println("name-->"+reader.nextString());//读取对应的值
}else if(key.equals("age")){
System.out.println("age-->"+reader.nextInt());//读取对应的值
}
}
reader.endObject();//结束对象解析
}
reader.endArray();//结束数组解析
} catch (Exception e) {
System.out.println(e+"解析");
}
}
//把单个json数据直接解析到一个对象里去
public User parseJson2User(String jsonData) {
Gson gson=new Gson();
User user=gson.fromJson(jsonData,User.class);
return user;
}
//把json数组数据直接解析到一组对象里去
public LinkedList<User> parseJson2Users(String jsonData) {
//Type是泛型,new TypeToken<LinkedList<User>>(){}是TypeToken的匿名内部子类
Type listType = new TypeToken<LinkedList<User>>(){}.getType();
Gson gson = new Gson();
LinkedList<User> users = gson.fromJson(jsonData, listType);
return users;
}
}
运行结果截图: