Android学习--封装成json数据和解析json数据

参考博客:http://www.cnblogs.com/mcgrady/archive/2013/06/08/3127781.html(如果涉及版权问题,请联系我。)

JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。XML也是一种数据交换格式,为什么没有选择XML呢?因为XML虽然可以作为跨平台的数据交换格式,但是在JS(JavaScript的简写)中处理XML非常不方便,同时XML标记比数据多,增加了交换产生的流量,而JSON没有附加的任何标记,在JS中可作为对象处理,所以我们更倾向于选择JSON来交换数据。这篇文章主要从以下几个方面来说明JSON。
1.json数据认识
2.封装json数据
3.json解析
4.从客户端数据传输到服务器端
5.从服务器端下载数据到客户端
6.json应用
开发环境:win7,eclipse,服务器端 tomcat7.0,Android

一、json数据认识

JSON有两种表示结构,对象和数组。
对象结构以”{”大括号开始,以”}”大括号结束。中间部分由0或多个以”,”分隔的”key(关键字)/value(值)”对构成,关键字和值之间以”:”分隔,语法结构如代码。
[
{
key1: value1,
key2: value2
},
{
key3: value3,
key4: value4
}
]
实例:

{
    "data": {
        "info": [
            {
                "bmi": "0",
                "contents": "22233",
                "time": "2015-05-14",
                "title": "2"
            },
            {
                "bmi": "0",
                "contents": "new",
                "time": "2015-05-14",
                "title": "33"
            }
        ]
    },
    "ret": 0,
    "msg": "ok"
}

二、封装json数据

private void jsonForm1() {
        // TODO Auto-generated method stub
        try {
            JSONObject person=new JSONObject();
            JSONArray phone=new JSONArray();
            phone.put("12345678").put("87654321");
            person.put("phone", phone);
            person.put("name", "zhangsanfeng");
            person.put("age", 20);
            JSONObject address=new JSONObject();
            address.put("country", "China");
            address.put("province", "zhejiang");
            person.put("address", address);
            person.put("married", false);
            Log.d(TAG, "person:"+person.toString());
            Log.d(TAG, person.getString("name"));
        } catch (JSONException ex) {
            // TODO: handle exception
            throw new RuntimeException(ex);
        }
    }

json数据封装后

二、json解析

private static final String JSON = "{"
            + "\"phone\" : [\"12345678\", \"87654321\"],"
            + "   \"name\" : \"yuanzhifei89\","
            + "   \"age\" : 100,"
            + "   \"address\" : { \"country\" : \"china\", \"province\" : \"jiangsu\" },"
            + "   \"married\" : false" + "}";
private void jsonParse(){
        try {
            JSONObject person=new JSONObject(JSON);
            Log.d(TAG, person.toString());
            person.getJSONArray("phone");
            Log.d(TAG, "person name"+person.getString("name"));
            Log.d(TAG, "person age"+person.getInt("age"));
            Log.d(TAG, "person marride"+person.getBoolean("marride"));
            JSONArray myArray=person.getJSONArray("phone");
            Log.d(TAG, "person phone"+myArray.toString());
        } catch (JSONException e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }

json解析

三、 从客户端数据传输到服务器端

客户端代码:

package com.example.asyntaskdome;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.TextView;
public class AddUserAsyncTask extends AsyncTask<String, Void, String> {
    TextView textRes;
    protected String doInBackground(String...params){
        HttpPost request=new HttpPost(params[0]);
        JSONObject param=new JSONObject();
        try {
            Log.d("sqt", "post......");
            param.put("username", "sqt");
            param.put("userpassword", "123456");
        } catch (JSONException e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        StringEntity se;
        try {//向服务器端发送数据
            se=new StringEntity(param.toString());
            request.setEntity(se);
            HttpResponse httpResponse=new DefaultHttpClient().execute(request);
            String retSrc=EntityUtils.toString(httpResponse.getEntity());
            Log.d("sqt", "retSrc:"+retSrc);
            return JsonParser(retSrc);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        return null;
    }
//根据从服务器返回回来的数据,进行解析,判断是否传输成功
    private String JsonParser(String retSrc) {
        // TODO Auto-generated method stub
        String result=null;

        try {
            JSONObject ret=new JSONObject(retSrc);
            int rr=ret.getInt("ret");
            if (rr==1) {
                result="success";
            }else {
                result="error";
            }
        } catch (Exception e) {
            // TODO: handle exception
        }
        return result;
    }
}

服务器端代码

package com.sqt.web.servlet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.sqt.web.dao.UserDao;
import com.sqt.web.model.User;
public class AddUsersServlet extends HttpServlet {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.doGet(req, resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        JSONObject jObject=new JSONObject();
        String addUserString=converStreamToString(req.getInputStream());
        HashMap<String, String>user=JsonParser(addUserString);
        try {
            UserDao uDao=new UserDao();
            if (uDao.insert(user.get("username"), user.get("password"))) {
                try {
                    jObject.put("ret", 1);
                    jObject.put("msg", "ok");
                    jObject.put("data", "");

                } catch (JSONException e) {
                        // TODO: handle exception
                        e.printStackTrace();
                }
            }else {
                    jObject.put("ret", 99);
                    jObject.put("msg", "cannot insert record");
                    jObject.put("data", "");
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        PrintWriter out=resp.getWriter();
        out.print(jObject);
        out.flush();
        out.close();
    }
    //通过http传递的流数据,转化成string类型
    private String converStreamToString(InputStream is){
        BufferedReader reader=new BufferedReader(new InputStreamReader(is));
        StringBuilder sb=new StringBuilder();
        String line=null;
        try {
            while ((line=reader.readLine())!=null) {
                sb.append(line+"/n");

            }
        } catch (IOException e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally{
            try {
                is.close();
            } catch (IOException e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }
        return sb.toString();
    }
    //对json数据进行解析
    private HashMap<String, String> JsonParser(String jsonString) {
        HashMap<String, String> hashMap = new HashMap<String, String>();
        try {
            JSONObject jsObject=new JSONObject(jsonString);
            hashMap.put("username",jsObject.getString("username"));
            hashMap.put("password",jsObject.getString("userpassword"));

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }       
        return hashMap;
    }
}

四、从服务器端下载数据到客户端

服务器端代码

package com.sqt.web.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.sqt.web.dao.UserDao;
import com.sqt.web.model.User;

public class GetUsersServlet extends HttpServlet {
    private static final long serialVersionUID=-6534417657358062448L;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setContentType("text/html;charset=UTF-8");
        JSONObject jObject=new JSONObject();
        UserDao userDao;
        try {
            userDao=new UserDao();
            ArrayList<User>retList=userDao.getUsers();
            JSONObject jObject2=new JSONObject();
            jObject2.put("totalnum", retList.size());
            JSONArray userlist=new JSONArray();
            for (User user:retList) {
                JSONObject record=new JSONObject();
                record.put("_id", user.getUid());
                record.put("username", user.getUsername());
                record.put("userpassword", user.getPassword());
                userlist.put(record);
            }
            jObject2.put("info", userlist);
            jObject.put("ret", 0);
            jObject.put("msg", "ok");
            jObject.put("data", jObject2);

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            try {
                jObject.put("ret", 1);
                jObject.put("msg", e.getMessage());
                jObject.put("data", "");

            } catch (JSONException ex) {
                // TODO: handle exception
                ex.printStackTrace();
            }
        }
        PrintWriter out=response.getWriter();
        out.print(jObject);
        out.flush();
        out.close();
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.doPost(req, resp);
    }
}

客户端端代码

package com.example.asyntaskdome;

import java.util.ArrayList;
import java.util.HashMap;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import android.R.mipmap;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class HttpAsyncTask extends
        AsyncTask<String, Integer, ArrayList<HashMap<String, Object>>> {
    private ListView listView;
    private Context context;

    public HttpAsyncTask(Context context, ListView listView) {
        this.context = context;
        this.listView = listView;
    }

    @Override
    protected ArrayList<HashMap<String, Object>> doInBackground(
            String... params) {
        // TODO Auto-generated method stub
        String responseStr = null;
        HttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(params[0]);
        try {
            HttpResponse httpResponse = httpClient.execute(httpGet);
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode == HttpStatus.SC_OK) {
                responseStr = EntityUtils.toString(httpResponse.getEntity());
            } else {
                responseStr = "返回值" + statusCode;
            }
        } catch (Exception e) {
            // TODO: handle exception
            Log.d("sqt", e.getMessage());
        }
        if (responseStr != null) {
            return jsonParse(responseStr);
        }
        return null;
    }

    @Override
    protected void onPostExecute(ArrayList<HashMap<String, Object>> result) {
        // TODO Auto-generated method stub
        Log.d("sqt", "post");
        if (result == null) {
            Log.d("sqt", "sqt null");
        }
        Log.d("sqt", "result" + result.size());

        listView.setAdapter(new SimpleAdapter(context, result, R.layout.vlist,
                new String[] { "uid", "username", "password" }, new int[] {
                        R.id.id, R.id.username, R.id.password }));
        // super.onPostExecute(result);
    }

    private ArrayList<HashMap<String, Object>> jsonParse(String jsonString) {
        // TODO Auto-generated method stub
        ArrayList<HashMap<String, Object>> resultList = new ArrayList<HashMap<String, Object>>();
        try {
            JSONObject jsonObject = new JSONObject(jsonString);
            int retCode = jsonObject.getInt("ret");
            Log.d("sqt", "retCode" + retCode);
            if (0 == retCode) {
                JSONObject dataObject = jsonObject.getJSONObject("data");
                int totalnum = dataObject.getInt("totalnum");
                Log.d("sqt", "totalnum" + totalnum);
                if (totalnum > 0) {
                    JSONArray userlist = dataObject.getJSONArray("info");
                    Log.d("sqt", "totalnum" + userlist.length());
                    for (int i = 0; i < userlist.length(); i++) {
                        JSONObject userObject = (JSONObject) userlist.opt(i);
                        HashMap<String, Object> hashMap = new HashMap<String, Object>();

                        hashMap.put("uid",
                                Integer.valueOf(userObject.getInt("_id")));
                        hashMap.put("username",userObject.getString("username"));
                        hashMap.put("password",userObject.getString("userpassword"));
                        resultList.add(hashMap);
                        Log.d("sqt","uid"+ Integer.valueOf(userObject.getInt("_id")));
                        Log.d("sqt","username" + userObject.getString("username"));
                        Log.d("sqt","password"+ userObject.getString("userpassword"));
                        Log.d("sqt", "add suceess");
                    }
                    return resultList;
                }
            }
        } catch (Exception e) {
            // TODO: handle exception
            Log.d("sqt", "parse error" + e.getMessage());
        }
        return null;
    }

}

五、应用

附加几个完整代码
json解析和封装案例:http://download.csdn.net/detail/shaoqianting/8698073
服务器和客户端传输案例:http://download.csdn.net/detail/shaoqianting/8698099
org.json包:http://download.csdn.net/detail/shaoqianting/8698183

QQ交流:394057031(注明在CSDN看到)
如果文章有什么错误,还请各位大神多多指教!谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值