简单Json解析

xiaoxiao2021-02-28  60

.Json数据类型 1.Json_object类型(Json_object.txt): {"name":"zhangsanfeng","age":3,"sex":"nv"} 2.Json_array类型(Json_array.txt): [{"name":"zhangsanfeng","age":3,"sex":"nv"},{"name":"zhaobenshan","age":2,"sex":"renyao"}]

3.混合Json类型(Jsony.txt):

{ "resultcode": "200", "reason": "查询成功!", "result": { "sk": { "temp": "21", "wind_direction": "西风", "wind_strength": "2级", "humidity": "4%", "time": "14:25" }, "today": { "city": "天津", "date_y": "2014年03月21日", "week": "星期五", "temperature": "8℃~20℃", "weather": "晴转霾", "weather_id": { "fa": "00", "fb": "53" }, "wind": "西南风微风", "dressing_index": "较冷", "dressing_advice": "建议着大衣、呢外套加毛衣、卫衣等服装。", "uv_index": "中等", "comfort_index": "", "wash_index": "较适宜", "travel_index": "适宜", "exercise_index": "较适宜", "drying_index": "" }, "future": [ { "temperature": "28℃~36℃", "weather": "晴转多云", "weather_id": { "fa": "00", "fb": "01" }, "wind": "南风3-4级", "week": "星期一", "date": "20140804" }, { "temperature": "28℃~36℃", "weather": "晴转多云", "weather_id": { "fa": "00", "fb": "01" }, "wind": "东南风3-4级", "week": "星期二", "date": "20140805" }, { "temperature": "27℃~35℃", "weather": "晴转多云", "weather_id": { "fa": "00", "fb": "01" }, "wind": "东南风3-4级", "week": "星期三", "date": "20140806" }, { "temperature": "27℃~34℃", "weather": "多云", "weather_id": { "fa": "01", "fb": "01" }, "wind": "东南风3-4级", "week": "星期四", "date": "20140807" }, { "temperature": "27℃~33℃", "weather": "多云", "weather_id": { "fa": "01", "fb": "01" }, "wind": "东北风4-5级", "week": "星期五", "date": "20140808" }, { "temperature": "26℃~33℃", "weather": "多云", "weather_id": { "fa": "01", "fb": "01" }, "wind": "北风4-5级", "week": "星期六", "date": "20140809" }, { "temperature": "26℃~33℃", "weather": "多云", "weather_id": { "fa": "01", "fb": "01" }, "wind": "北风4-5级", "week": "星期日", "date": "20140810" } ] }, "error_code": 0 }

一.原生解析(采用谷歌原生Json)

1.MainActivity.java文件

package com.ittujunyong.simplejson; import org.json.Exception; import org.json.JSONArray;import java.util.ArrayList;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View; import android.content.Context; import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {protected static final int SUCCESS_object = 1; protected static final int SUCCESS_array = 2;protected static final int SUCCESS_jsony = 3;protected static final int ERROR = 4;private TextView tv;private ListView lv;  //使用到上下文的对象  private Context context = MainActivity.this;//定义路径private String url_object = "http://192.168.12.143:8080/json_object.txt";  private String url_array = "http://192.168.12.143:8080/json_array.txt";private String url_jsony = "http://192.168.12.143:8080/jsony.txt"; //定义Handler private Handler handler = new Handler(){//重写方法public void handleMessage(android.os.Message msg) {//选择switch(msg.what){case SUCCESS_object: String jsonData = (String) msg.obj;//调用方法UserBean bean = readJsonObject(jsonData);//显示数据tv.setText(bean.toString());break;case SUCCESS_array:  String jsonData = (String) msg.obj;     //调用方法解析JSON数据     ArrayList<UserBean> al = readJsonData(jsonData);     //定义方法     MyAdapter adapter = new MyAdapter(context,al);     //显示在ListView上面.设置适配器     lv.setAdapter(adapter);     break; case SUCCESS_jsony:String jsonData = (String) msg.obj; //调用方法解析混合JSON数据ArrayList<Bean> al = readJsonyData(jsonData);//定义方法MyAdapter adapter = new MyAdapter(context,al);//显示在ListView上面.设置适配器lv.setAdapter(adapter);//tv.setText(jsonData);break; case ERROR: Toast.makeText(MainActivity.this, "数据失败", 0).show();break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);//绑定控件tv = (TextView) findViewById(R.id.tv); lv = (ListView) findViewById(R.id.lv);}/*** * 解析JSON_Object数据 ctrl + K * @param jsonData * @return */protected UserBean readJsonObject(String jsonData) {UserBean bean = null;//内置的JSON解析方法 JSONObject//直接创建对象try {JSONObject jsonObject = new JSONObject(jsonData);//用键取值String xname = jsonObject.getString("name");int xage = jsonObject.getInt("age");String xsex = jsonObject.getString("sex");//保存数据到beanbean = new UserBean(xname, xage, xsex);} catch (JSONException e) {e.printStackTrace();}return bean;}/**** * 解析JSON_Array数据的操作 * @param jsonData * @return */protected ArrayList<UserBean> readJsonData(String jsonData) {ArrayList<UserBean> al = new ArrayList<UserBean>();try {//创建JSONAray的对象JSONArray jsonArray = new JSONArray(jsonData);//数组.遍历for循环 --- 条件://01.数组的长度是多少 jsonArray.length()//02.数组里面每一个元素的表示方式 jsonArray.getXXX(i);//循环遍历数组for (int i = 0; i < jsonArray.length(); i++) {//得到每一个元素JSONObject job = jsonArray.getJSONObject(i);//通过键KEY,取得值ValueString xname = job.getString("name");String xsex = job.getString("sex");int xage = job.getInt("age");//保存数据到JavaBean当中UserBean bean = new UserBean(xname, xage, xsex);//添加数据到集合当中al.add(bean);}} catch (Exception e) {e.printStackTrace();}return al;} /**** * 解析混合JSON数据的操作 * @param jsonData * @return */ protected ArrayList<Bean> readJsonyData(String jsonData) { ArrayList<Bean> al = new ArrayList<Bean>(); try { //创建JSONObject的对象 JSONObject jsonObject01 = new JSONObject(jsonData); //得到下一个数据 JSONObject jsonObject02 = jsonObject01.getJSONObject("result"); //得到下一个数据 JSONArray jsonArray01 = jsonObject02.getJSONArray("future"); //数组---循环遍历 //01.长度 jsonArray01.length() //02.元素表示方式 jsonArray01.getXXX(i); for (int i = 0; i < jsonArray01.length(); i++) { //取得每一个元素 JSONObject jsonObject03 = jsonArray01.getJSONObject(i); //得到数据 String xdata = jsonObject03.getString("date"); String xtemperature = jsonObject03.getString("temperature"); String xweather = jsonObject03.getString("weather"); String xweek = jsonObject03.getString("week"); String xwind = jsonObject03.getString("wind"); //创建对象 Bean b = new Bean(xdata, xtemperature, xweather, xweek, xwind); //直接保存 al.add(b); } } catch (Exception e) { e.printStackTrace(); } return al; } //按钮的点击事件,点击的时候访问网络public void click(View v){//String url -->string data [JSON]//访问网络:开启子线程new Thread(){public void run() {//调用方法try {//得到JSON数据String data = WebHelper.loadData(url_object);//String data = WebHelper.loadData(url_array); //String data = WebHelper.loadData(url_jsony); //得到消息的对象 Message msg = Message.obtain(); //设置what msg.what = SUCCESS_object; //msg.what = SUCCESS_array; //msg.what = SUCCESS_jsony; //设置数据 msg.obj = data; //发送消息 handler.sendMessage(msg); } catch (Exception e) { e.printStackTrace(); //得到消息的对象 Message msg = Message.obtain(); //设置what msg.what = ERROR; //发送消息 handler.sendMessage(msg); } }; }.start(); } }

2-1.UserBean.java文件

package com.ittujunyong.simplejson; public class UserBean { private String name; private int age; private String sex; 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; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "UserBean [name=" + name + ", age=" + age + ", sex=" + sex + "]"; } public UserBean(String name, int age, String sex) { super(); this.name = name; this.age = age; this.sex = sex; } }

2-2.Bean.java文件

package com.ittujunyong.simplejson; public class Bean { private String date; private String temperature; private String weather; private String week; private String wind; public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getTemperature() { return temperature; } public void setTemperature(String temperature) { this.temperature = temperature; } public String getWeather() { return weather; } public void setWeather(String weather) { this.weather = weather; } public String getWeek() { return week; } public void setWeek(String week) { this.week = week; } public String getWind() { return wind; } public void setWind(String wind) { this.wind = wind; } public Bean(String date, String temperature, String weather, String week, String wind) { super(); this.date = date; this.temperature = temperature; this.weather = weather; this.week = week; this.wind = wind; } @Override public String toString() { return "Bean [date=" + date + ", temperature=" + temperature + ", weather=" + weather + ", week=" + week + ", wind=" + wind + "]"; } }

3.WebHelper.java文件

package com.ittujunyong.simplejson; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class WebHelper { public static String loadData(String path) throws Exception{ //定义返回值字符串 String result = null; //--------------------------- //访问网络的操作: //1.创建URL的对象 url //2.通过url打开conn的对象 //3.通过conn得到code响应码 //4.判断响应码是否是200 //5.如果是200得到conn里面的inputStream的对象 //如果需要的是字符串,转换inputStream为字符串(文本) //如果是图片数据,转换inputStream为位图 bitmap URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); int code = conn.getResponseCode(); //判断 if (code == 200) { //得到inputStream InputStream is = conn.getInputStream(); //转换字符串 BufferedReader br = new BufferedReader(new InputStreamReader(is, "gbk")); //定义临时变量 String line = null; //创建StringBuffer的对象,追加数据 StringBuffer sb = new StringBuffer(); //循环读取数据 while((line = br.readLine())!=null){ //追加数据 sb.append(line); } //关闭IO流 br.close(); is.close(); //得到数据 result = sb.toString(); } //---------------------------- //返回数据 return result; } }

4.MyAdapter.java文件

package com.ittujunyong.simplejson; import java.util.ArrayList; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class MyAdapter extends BaseAdapter{ private Context context; private ArrayList<UserBean> al; //构造方法,传递参数 public MyAdapter(Context context, ArrayList<UserBean> al) { this.al = al; this.context = context; } //得到条目总数 @Override public int getCount() { return al.size(); } //无视 @Override public Object getItem(int position) { return null; } //无视 @Override public long getItemId(int position) { return 0; } //得到每一个条目的视图 @Override public View getView(int position, View convertView, ViewGroup parent) { //定义视图 View vv = null; //判断是不是第一次加载数据 if (convertView==null) { //打气筒 vv = View.inflate(context, R.layout.item, null); }else { //复用视图 vv = convertView; } //关心控件 TextView nameTextView = (TextView) vv.findViewById(R.id.item_name); TextView ageTextView = (TextView) vv.findViewById(R.id.item_age); TextView sexTextView = (TextView) vv.findViewById(R.id.item_sex); //得到数据 String name = al.get(position).getName(); String sex = al.get(position).getSex(); String age = al.get(position).getAge()+""; //显示数据到视图上面 nameTextView.setText(name); sexTextView.setText(sex); ageTextView.setText(age); /** TextView x1 = (TextView) vv.findViewById(R.id.item_1);    TextView x2 = (TextView) vv.findViewById(R.id.item_2);    TextView x3 = (TextView) vv.findViewById(R.id.item_3);    TextView x4 = (TextView) vv.findViewById(R.id.item_4);    TextView x5 = (TextView) vv.findViewById(R.id.item_5); x1.setText(al.get(position).getDate()); x2.setText(al.get(position).getTemperature()); x3.setText(al.get(position).getWeather()); x4.setText(al.get(position).getWeek()); x5.setText(al.get(position).getWind()); */ //返回数据return vv;}}

5.JsonUtil.java文件

package com.ittujunyong.play.util; import java.lang.reflect.Type; import java.util.HashMap; import java.util.List; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; import android.text.TextUtils; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; /** * 封装的是使用Gson解析json的方法 * * @author Administrator * */ public class JsonUtil { /** * 把一个map变成json字符串 * * @param map * @return */ public static String parseMapToJson(Map<?, ?> map) { try { Gson gson = new Gson(); return gson.toJson(map); } catch (Exception e) { } return null; } /** * 把一个json字符串变成对象 * * @param json * @param cls * @return */ public static <T> T parseJsonToBean(String json, Class<T> cls) { Gson gson = new Gson(); T t = null; try { t = gson.fromJson(json, cls); } catch (Exception e) { } return t; } /** * 把json字符串变成map * * @param json * @return */ public static HashMap<String, Object> parseJsonToMap(String json) { Gson gson = new Gson(); Type type = new TypeToken<HashMap<String, Object>>() { }.getType(); HashMap<String, Object> map = null; try { map = gson.fromJson(json, type); } catch (Exception e) { } return map; } /** * 把json字符串变成集合 params: new TypeToken<List<yourbean>>(){}.getType(), * * @param json * @param type * new TypeToken<List<yourbean>>(){}.getType() * @return */ public static List<?> parseJsonToList(String json, Type type) { Gson gson = new Gson(); List<?> list = gson.fromJson(json, type); return list; } /** * * 获取json串中某个字段的值,注意,只能获取同一层级的value * * @param json * @param key * @return */ public static String getFieldValue(String json, String key) { if (TextUtils.isEmpty(json)) return null; if (!json.contains(key)) return ""; JSONObject jsonObject = null; String value = null; try { jsonObject = new JSONObject(json); value = jsonObject.getString(key); } catch (JSONException e) { e.printStackTrace(); } return value; } }

二、采用Gson框架解析

1.MainActivity.java文件

package com.ittujunyong.simplejson; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { protected static final int SUCCESS = 1; protected static final int ERROR = 2; private TextView tv; private ListView lv; //使用到上下文的对象 private Context context = MainActivity.this;// 定义路径private String url = "http://192.168.12.143:8080/json_object.txt"; private String url = "http://192.168.12.143:8080/json_array.txt"; private String url = "http://192.168.12.143:8080/jsony.txt"; // 定义Handlerprivate Handler handler = new Handler() {// 重写方法public void handleMessage(android.os.Message msg) {// 选择switch (msg.what) {case SUCCESS:String jsonData = (String) msg.obj;// 调用方法UserBean bean = readJsonObject(jsonData);// 显示数据tv.setText(bean.toString());break; case SUCCESS: String jsonData = (String) msg.obj; //调用方法解析JSON数据 ArrayList<UserBean> al = readJsonData(jsonData); //定义方法 MyAdapter adapter = new MyAdapter(context,al); //显示在ListView上面.设置适配器 lv.setAdapter(adapter); //tv.setText(jsonData); break; case SUCCESS: String jsonData = (String) msg.obj; // 调用方法解析混合JSON数据 ArrayList<Bean> al = readJsonyData(jsonData); // 定义方法 MyAdapter adapter = new MyAdapter(context, al); // 显示在ListView上面.设置适配器 lv.setAdapter(adapter); // tv.setText(jsonData); break; case ERROR: Toast.makeText(MainActivity.this, "数据失败", 0).show(); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 关心控件 tv = (TextView) findViewById(R.id.tv); lv = (ListView) findViewById(R.id.lv); } /*** * 解析JSON_object数据 ctrl + K * * @param jsonData * @return */ protected UserBean readJsonObject(String jsonData) { UserBean bean = null; //---------------------------------- //参数1:需要解析的JSON字符串 //参数2:解析生成类的字节码 ---> UserBean.class bean = JsonUtil.parseJsonToBean(jsonData, UserBean.class); //---------------------------------- return bean; } /**** * 解析JSON_array数据的操作 * @param jsonData * @return */ protected ArrayList<UserBean> readJsonData(String jsonData) { ArrayList<UserBean> al = new ArrayList<UserBean>(); //参数1:需要解析的JSON数据 //参数2:List集合的字节码.class new TypeToken<List<yourbean>>(){}.getType() al = (ArrayList<UserBean>) JsonUtil.parseJsonToList(jsonData,new TypeToken<List<UserBean>>(){}.getType()); return al; } /**** * 解析混合JSON数据的操作 * * @param jsonData * @return */ protected ArrayList<Bean> readJsonyData(String jsonData) { ArrayList<Bean> al = new ArrayList<Bean>(); // 参数1:需要解析的JSON数据 // 参数2:解析的节点 result String data01 = JsonUtil.getFieldValue(jsonData, "result"); // 参数1:需要解析的JSON数据 // 参数2:解析的节点 result String data02 = JsonUtil.getFieldValue(data01, "future"); try { //直接采用JSONArray去解析 JSONArray jsonArray = new JSONArray(data02); //循环 for (int i = 0; i < jsonArray.length(); i++) { //得到数据 JSONObject job = jsonArray.getJSONObject(i); String xdate = job.getString("date"); String xtemperature = job.getString("temperature"); String xweather = job.getString("weather"); String xweek = job.getString("week"); String xwind = job.getString("wind"); //创建对象 Bean b = new Bean(xdate, xtemperature, xweather, xweek, xwind); al.add(b); } } catch (Exception e) { e.printStackTrace(); } return al; } // 按钮的点击事件,点击的时候访问网络public void click(View v) {// String url -->string data [JSON]// 访问网络:开启子线程new Thread() {public void run() {// 调用方法try {// 得到JSON数据String data = WebHelper.loadData(url);// 得到消息的对象Message msg = Message.obtain();// 设置whatmsg.what = SUCCESS;// 设置数据msg.obj = data;// 发送消息handler.sendMessage(msg);} catch (Exception e) {e.printStackTrace();// 得到消息的对象Message msg = Message.obtain();// 设置whatmsg.what = ERROR;// 发送消息handler.sendMessage(msg);}};}.start();}}

转载请注明原文地址: https://www.6miu.com/read-60201.html

最新回复(0)