简单Json解析
来源:互联网 发布:java高并发项目源码 编辑:程序博客网 时间:2024/06/05 02:52
一.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();//设置whatmsg.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();//设置whatmsg.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;}@Overridepublic 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;}@Overridepublic 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为位图 bitmapURL url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();int code = conn.getResponseCode();//判断if (code == 200) {//得到inputStreamInputStream 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;}//得到条目总数@Overridepublic int getCount() {return al.size();}//无视@Overridepublic Object getItem(int position) {return null;}//无视@Overridepublic long getItemId(int position) {return 0;}//得到每一个条目的视图@Overridepublic 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;}}};@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;//----------------------------------//参数1:需要解析的JSON字符串//参数2:解析生成类的字节码 ---> UserBean.classbean = 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:解析的节点 resultString data01 = JsonUtil.getFieldValue(jsonData, "result");// 参数1:需要解析的JSON数据// 参数2:解析的节点 resultString 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();}}
0 0
- 简单json解析
- json解析简单事例
- Json学习--简单解析
- 简单json解析
- 简单Json解析
- 简单解析Json
- 【json】android json解析及简单例子
- Json(org.json)简单封装与解析
- 生成Json、解析Json的简单示例
- 简单解析json数据demo
- json解析的简单例子
- json解析及简单例子
- 简单ios json解析处理
- android json 解析 简单示例
- android json 解析简单实例
- 简单JSON解析案例出错
- 最简单Json解析1
- 简单json,FastJson,Gson解析
- springIoC--Bean装配的3种方式比较
- Linux的fork
- [蘑菇街]最大间隔
- Unity 打包 导出设置
- 如何用js得到当前页面的url信息方法(JS获取当前网址信息)
- 简单Json解析
- 编写优质嵌入式C代码
- Linux的主机名基础
- 10 WebGL的缓冲区对象使用
- POJ 1038 Bugs Integrated, Inc. 笔记
- jsp中重定向和转发的区别
- 蓝桥杯 算法训练 K好数 JAVA
- 我操,10年了,终于有名次了
- C++11多线程同步之互斥变量使用学习