Json的解析简记

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 {
@Override
public 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 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() {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
            HashMap map = (HashMap) 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));
“`

你可能感兴趣的:(【Android实用方法】)