Android解析JSON

来源:互联网 发布:狼图腾知乎 编辑:程序博客网 时间:2024/06/06 19:31

首先需要服务器端生成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
代码上完,看看效果图
这里写图片描述
希望对朋友们有帮助,有什么建议请留言。谢谢

0 0
原创粉丝点击