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));
“`

0 0