Android解析JSON

首先需要服务器端生成JSON 数据,然后再到Android中解析

@RequestMapping("getJson.xhtml")
    public String getJson(HttpServletRequest request){
        List<FQ> fqs = new ArrayList<FQ>();
        for (int i = 1; i <= 100; i++) {
            Calendar calendar = Calendar.getInstance();
            int year = calendar.get(Calendar.YEAR);
            int month = calendar.get(Calendar.MONTH);
            int day = calendar.get(Calendar.DAY_OF_MONTH);
            fqs.add(new FQ("LL" + i, "今天心情good"+i, year + "-" + month + "-" + day));
        }
         //将对象集合转为JSON
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("class", "996444703");
        jsonObject.put("lists", fqs.size());

        JSONArray jsonArray = new JSONArray();

        for(FQ fq: fqs){
            JSONObject object = new JSONObject();
            object.put("name", fq.getName());
            object.put("content", fq.getContent());
            object.put("time", fq.getTime());
            jsonArray.add(object);
        }
        jsonObject.put("fqs", jsonArray);
        request.setAttribute("fqs", jsonObject.toString());
        return "dataResultJson";
    }

这里可以使用@RequestBody注解方式快速转换为JSON ,但是为了使用一下比较原始的方法。
dataResultJson.jsp

<%@ page language="java" contentType="text/plain; charset=UTF-8"
    pageEncoding="UTF-8"%>${fqs }

连上网络然后浏览器查看生成的JSON
这里写图片描述

接下来安卓获取数据并解析
上代码
activity_get_json.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    >

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="获取Json"
        android:onClick="getJson"
        />

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/lv_json_list"
        >
    </ListView>

</LinearLayout>

还需要一个实体类于JSON 数据各种相对应

public class BigFQ {
    private String clazz;
    private int lists;
    private List<FQ> fqs;

    public String getClazz() {
        return clazz;
    }

    public void setClazz(String clazz) {
        this.clazz = clazz;
    }

    public int getLists() {
        return lists;
    }

    public void setLists(int lists) {
        this.lists = lists;
    }

    public List<FQ> getFqs() {
        return fqs;
    }

    public void setFqs(List<FQ> fqs) {
        this.fqs = fqs;
    }

    public BigFQ() {
    }

    public BigFQ(String clazz, int lists, List<FQ> fqs) {
        this.clazz = clazz;
        this.lists = lists;
        this.fqs = fqs;
    }
}

FQ

public class FQ {
    private String name;
    private String content;
    private String time;
    public FQ() {
        super();
    }
    public FQ(String name, String content, String time) {
        super();
        this.name = name;
        this.content = content;
        this.time = time;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public String getTime() {
        return time;
    }
    public void setTime(String time) {
        this.time = time;
    }
}
public class ItemTag {
    public TextView tv_name;
    public TextView tv_content;
    public TextView tv_time;
}

GetJsonActivity.java

public class GetJsonActivity extends AppCompatActivity {

    private ListView lv_json_list;
    private List<FQ> lists=new ArrayList<>();
    private MyAdapter myAdapter;
    private ProgressDialog progressDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_get_json);

        lv_json_list = (ListView) findViewById(R.id.lv_json_list);
        myAdapter = new MyAdapter();
        lv_json_list.setAdapter(myAdapter);

        progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("正在拼命loading中...");
    }
    class MyAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return lists.size();
        }

        @Override
        public Object getItem(int i) {
            return lists.get(i);
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {

            if(view==null){
                view= LayoutInflater.from(GetJsonActivity.this).inflate(R.layout.item_listview,null);

                ItemTag itemTag=new ItemTag();

                itemTag.tv_content= (TextView) view.findViewById(R.id.tv_item_listview_content);
                itemTag.tv_name= (TextView) view.findViewById(R.id.tv_item_listview_name);
                itemTag.tv_time= (TextView) view.findViewById(R.id.tv_item_listview_time);

                view.setTag(itemTag);
            }

            ItemTag itemTag= (ItemTag) view.getTag();
            itemTag.tv_name.setText(lists.get(i).getName());
            itemTag.tv_content.setText(lists.get(i).getContent());
            itemTag.tv_time.setText(lists.get(i).getTime());

            return view;
        }
    }

    public void getJson(View view){
            new MyTask().execute();
    }

    class MyTask extends AsyncTask{

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog.show();
        }

        @Override
        protected Object doInBackground(Object[] objects) {
            String path="http://192.168.42.253:8090/front/getJson.xhtml";
            try {
                URL url=new URL(path);
                HttpURLConnection connection= (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("GET");
                connection.setConnectTimeout(5000);


                if(connection.getResponseCode()==200){
                    InputStream is=connection.getInputStream();
                    //读
                    BufferedReader br=new BufferedReader(new InputStreamReader(is));
                    StringBuffer stringBuffer=new StringBuffer();
                    String str=null;
                    while((str=br.readLine())!=null){
                        stringBuffer.append(str);
                    }
//                    Log.i("test",stringBuffer.toString());

                    //解析JSOn
                    //01.原生态
//                    try {
//                        JSONObject jsonObject=new JSONObject(stringBuffer.toString());
//                        String clazz=jsonObject.getString("class");
//                        Log.i("test","class:"+clazz);
//                        int num=jsonObject.getInt("lists");
//                        Log.i("test","lists:"+num);
//
//                        JSONArray jsonArray=jsonObject.getJSONArray("fqs");
//                        for (int i = 0; i <jsonArray.length() ; i++) {
//                            JSONObject object=jsonArray.getJSONObject(i);
//                            String name=object.getString("name");
//                            String content=object.getString("content");
//                            String time=object.getString("time");
//                            FQ fq=new FQ(name,content,time);
//                            lists.add(fq);
//                        }
//                    } catch (JSONException e) {
//                        e.printStackTrace();
//                    }


                    //02.使用Gson解析json
//                    Gson gson=new Gson();
//                    BigFQ bigFQ=gson.fromJson(stringBuffer.toString(),BigFQ.class);
//
//                    String clazz=bigFQ.getClazz();
//                    int num=bigFQ.getLists();
//
//                    Log.i("test","clazz "+clazz+" num:"+num);
//                    lists.addAll(bigFQ.getFqs());

                    //03.使用FastJson
                    BigFQ bigFQ=JSON.parseObject(stringBuffer.toString(),BigFQ.class);
                    String clazz=bigFQ.getClazz();
                    int num=bigFQ.getLists();

                    Log.i("test","clazz "+clazz+" num:"+num);
                    lists.addAll(bigFQ.getFqs());

                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }


            return null;
        }

        @Override
        protected void onPostExecute(Object o) {
            super.onPostExecute(o);

            myAdapter.notifyDataSetChanged();

            progressDialog.cancel();
        }
    }


}

上面的解析JSon使用了3种不同的方式
第一种是比较原生态的解析方式,第二种使用了GOOGLE公司自带的GJson,使用Gson需要导入JAR包
(在gradle依赖(dependencies)中加入compile ‘com.google.code.gson:gson:2.8.0’就导入了Gson的JAR包)
这里写图片描述


第三种则需要导入FastJson的JAR包有需要的同学可以前去下载https://github.com/alibaba/fastjson
代码上完,看看效果图
这里写图片描述
希望对朋友们有帮助,有什么建议请留言。谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值