android json数据解析

本文介绍了一个简单的Android应用Demo,该Demo演示了如何使用Gson库进行JSON数据解析,并提供了三种不同的解析方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}

运行结果截图:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值