Json的解析简记
来源:互联网 发布:js input 禁止光标 编辑:程序博客网 时间:2024/05/16 13:58
Android在网络通信的过程中,经常会遇到数据传输的问题,而较为常见的数据传输的方式则是通过Json进行传输的。以下是请求服务器、返回Json以及对几种Json的解析的简单记录。
1、请求服务器,返回一个Json数组:
基本思路就是,先封装一个请求服务器的基类,类的传入参数是String类型,也就是网址,返回值也为String类型,为想得到的Json数组。采用HttpClient的方式。具体代码如下:
public class JsonUtil { public static String stringJson; public static final int REQUEST_TIMEOUT = 5 * 1000; public static final int SO_TIMEOUT = 10 * 1000; public static String Jsonreceive(String str) { // 使用apache HTTP客户端实现 HttpPost request = new HttpPost(str); try { // 设置请求参数项 HttpClient client = getHttpClient(); // 执行请求返回相应 HttpResponse response = client.execute(request); // 判断是否请求成功 if (response.getStatusLine().getStatusCode() == 200) { // 获得响应信息 stringJson= EntityUtils.toString(response.getEntity()); } } catch (Exception e) { e.printStackTrace(); } return stringJson; } // 初始化HttpClient,并设置超时 public static HttpClient getHttpClient() { BasicHttpParams httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams, REQUEST_TIMEOUT); HttpConnectionParams.setSoTimeout(httpParams, SO_TIMEOUT); HttpClient client = new DefaultHttpClient(httpParams); return client; }
封装好之后,在需要获取Json的界面,调用这个方法就能实现获取Json的功能,具体代码如下:
public class JsonThread implements Runnable { @Override public void run() { stringJson= JsonUtil.Jsonreceive(path); Message msg = handler.obtainMessage(); msg.what = 0; handler.sendMessage(msg); } }
由于该请求网络的操作是放在线程里面,而线程不允许对UI进行操作,所以,通过线程得到的值得通过handler发出来,然后在主线程中应用。这样就能得到服务器返回的Json,接下来就是对几种Json格式的解析。
1、{“num”:96,”name”:”小狗”,”code”:89};
解析代码:
JSONObject jsonObject = new JSONObject(stringJson); int num = jsonObject.getInt("num"); int code= jsonObject.getInt("code"); String name = jsonObject.getString("name");
2、{“list”:[{“num”:95,”name”:”mike”},{“num”:96,”name”:”lucy”}]};
这种json格式的解析,先遍历出每个字段再放到数组里面:
JSONObject jsonObject = new JSONObject(stringJson); jsonArray = jsonObject.getJSONArray("list"); for (int i = 0; i < jsonArray.length(); i++) { JSONObject item = jsonArray.getJSONObject(i); int num= item.getString("num"); String name= item.getString("name"); switch(i){ case 0: String[] str = {""+num,name}; break case 1: String[] str1 = {""+num,name}; break } }
这样就可以得到list里面两个子数组,如果只想得到数组里面的字段,则直接遍历即可。
3、{
status: true,
info: “信息获取成功”,
results: {
typeid: “1”,
username: “1353456895”,
nickname: “bdjCM_231”,
name: null,
email: null,
sex: null,
img: “http://avatar/3034cd266545ef4e4c3ee4e664e0b4a5.jpg”
}
}
private void isnettest() {boolean isnet = BaseActivity.isNetworkAvailable(UserActivity.this);if (isnet == false) { Toast.makeText(UserActivity.this, "请检查你的网络连接", Toast.LENGTH_SHORT).show(); } else { Thread thread = new Thread(new UserThread()); thread.start(); }}Handler handler = new Handler() {public void handleMessage(Message msg) {switch (msg.what) {case 0:new NormalLoadPictrue().getPicture(image, main_user_image_userimage);if("null".equals(nickname)){ }else {view2.setText(nickname); }break;default:break; } }};private class UserThread implements Runnable {@Overridepublic void run() {informationreturn = JsonUtil.loginServer(information); Message msg = handler.obtainMessage();try {jsonObject = new JSONObject(informationreturn);item = jsonObject.getJSONObject("results");image = item.getString("img");nickname = item.getString("nickname"); } catch (JSONException e) { e.printStackTrace(); } msg.what = 0;handler.sendMessage(msg); }}
4、{“status”:true,”info”:”“,”results”:{“arr_come”:{“time”:”09:30–10:00”,”num”:3,”stay”:1},”arr_affter”:{“time”:”09:00–09:30”,”num”:8,”stay”:0},”arr_stay”:{“time”:”09:30–10:00”,”num”:3,”stay”:1}}}
customer_bestreturn = JsonUtil.loginServer(customer_best);jsonObject2 = new JSONObject(customer_bestreturn);item2 = jsonObject2.getJSONObject("results");item2_1 = item2.getJSONObject("arr_come");arr_come_num = item2_1.getInt("num");arr_come_time = item2_1.getString("time");item2_2 = item2.getJSONObject("arr_stay");arr_stay_stay = item2_2.getInt("stay");arr_stay_time = item2_2.getString("time");item2_3 = item2.getJSONObject("arr_affter");arr_affter_num = item2_3.getInt("num");arr_affter_time = item2_3.getString("time");
5、results: [
{
id: “1”,
userid: “2”,
info: “今日的营业额有点差,”,
mark: “0”,
start: “1442630052”,
end: “1442892048”,
disabled: “0”,
time: “2015/09/22”,
edittime: “1442892048”,
flag: “1”
},
{
id: “20”,
userid: “2”,
info: “营业额有点差,”,
mark: “1”,
start: “1442630052”,
end: “1442892048”,
disabled: “0”,
time: “2015/09/22”,
edittime: “1442892048”,
flag: “0”
}
mymenoreturn = JsonUtil.loginServer(mymeno);jsonObject3 = new JSONObject(mymenoreturn);status = jsonObject3.getString("status");jsonArray = jsonObject3.getJSONArray("results");if ("true".equals(status)) {for (int i = 0; i < jsonArray.length(); i++) {item3 = jsonArray.getJSONObject(i);info = item3.getString("info");time = item3.getString("time");mark = item3.getInt("mark");menoid = item3.getInt("id");if (mark == 1) {starid = R.mipmap.main_home_image_star_on; } else {starid = R.mipmap.main_home_image_star_off; } HashMap<String, Object> map = new HashMap<>(); map.put("item_image_01", starid); map.put("item_tv_01", info); map.put("item_tv_02", time); map.put("menoid",menoid); listimageitem.add(map); } SimpleAdapter saImageItems = new SimpleAdapter(Home.this, listimageitem,// 数据源R.layout.activity_home_listview_item,// 显示布局new String[]{"item_image_01", "item_tv_01", "item_tv_02"},new int[]{R.id.main_home_image_listview_itemImage, R.id.main_home_tv_listview_item_01, R.id.main_home_tv_listview_item_02});listview.setAdapter(saImageItems);listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) { HashMap<String, Object> map = (HashMap<String, Object>) listview.getItemAtPosition(position);int kk = (int) map.get("menoid"); Intent intent = new Intent(); intent.putExtra("menoid", kk+""); intent.setClass(Home.this, Mymeno.class); startActivity(intent); } });}
注:数组在日志中的输出,不能直接输出数组名称,而是应该用:
System.out.println(“uyk” + Arrays.asList(str));
“`
- Json的解析简记
- json对象的解析,jquery 解析json
- 【简记】用lxml解析html
- json的解析方式
- Android的JSON解析
- json 的数据解析
- 解析JSON的过程
- jQuery的JSON解析
- JSON的解析
- 解析JSON的例子
- JSON数据的解析
- Android的Json解析
- Android的JSON解析
- Json的解析
- Android的JSON解析
- android json的解析
- 关于json的解析
- 解析自己的json
- IT行业中的六个肮脏秘密
- 面试题22 栈的压入弹出序列
- Android Design Support Library概览
- C++多态基础
- cocos2d js layer定义扑克放在scene中,修改layer中图片,layer响应点击函数
- Json的解析简记
- The request sent by the client was syntactically incorrect
- Android中的动画,自定义补间动画
- floodFill函数
- 【php】include、include_once、require、require_once的区别
- UITableViewCell自定义右边的文字以及更改左边图片的大小
- ORA-01000:超出打开游标的最大数 的解决办法(C#)
- 关于CPU Cache——程序猿需要知道的那些事
- IOS开发—CALayer介绍