android json数据解析

来源:互联网 发布:网络棋牌频道直播象棋 编辑:程序博客网 时间:2024/06/14 15:28

      此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;    }}

运行结果截图:



1 0
原创粉丝点击