如何解析Android中的JSON数据

时间:2011-11-18 06:38:34

标签: android json parsing

  

可能重复:
  Sending and Parsing JSON in Android

我从服务器获取JSON数据,我已经通过代码获取了JSON数据。但我不明白如何解析它。

这是我的服务器代码我从mysql数据库中获取数据然后发送到android 设备

   import java.io.*;
   import java.util.*;
   import javax.sql.*;
   import javax.servlet.*;
   import javax.servlet.http.*;
   import java.sql.Connection;
   import java.sql.DriverManager;
   import java.sql.ResultSet;
   import java.sql.SQLException;
   import java.sql.Statement;
   import net.sf.json.JSONArray;

   public class DBConnection extends HttpServlet {
          public void doGet(HttpServletRequest request,HttpServletResponse     response)throws IOException, ServletException{

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

    // connecting to database
    Connection con = null;    
    Statement stmt = null;
    ResultSet rs = null;

    try {
        Class.forName("com.mysql.jdbc.Driver");
        con =DriverManager.getConnection("jdbc:mysql://localhost:3306/emarnew", "root","12345");
        stmt = con.createStatement();
        rs = stmt.executeQuery("SELECT * FROM allpatientdetails WHERE patientname='Mr Hans Tan'");


    // displaying records
        while(rs.next()){
    JSONArray arrayObj=new JSONArray();
        String name="patientname"+rs.getObject(1).toString();
    arrayObj.add(name);

        arrayObj.add(rs.getObject(2).toString());
        arrayObj.add(rs.getObject(3).toString());
        arrayObj.add(rs.getObject(4).toString());
        arrayObj.add(rs.getObject(5).toString());
        arrayObj.add(rs.getObject(6).toString());
        arrayObj.add(rs.getObject(7).toString());
        arrayObj.add(rs.getObject(8).toString());
        String nik =arrayObj.toString();

           // fetch the parameters from client..

            final String user = request.getParameter("UID");
             // out.print(user);

             if("patients".equals(user))
               out.print(nik);
            else 
               out.println("fail");

         // out.print(nik);
           //   out.print("\t\t\t");
             //   out.print("<br>");

}
    } catch (SQLException e) {
        throw new ServletException("Servlet Could not display records.", e);
      } catch (ClassNotFoundException e) {
          throw new ServletException("JDBC Driver not found.", e);
        } finally {
            try {
                if(rs != null) {
                    rs.close();
                    rs = null;
                }
                if(stmt != null) {
                    stmt.close();
                    stmt = null;
                }
                if(con != null) {
                    con.close();
                    con = null;
                }
            } catch (SQLException e) {}
        }

        out.close();
    }

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException
{
    this.doGet(request, response);
}


}

这是我的安卓代码             import java.util.ArrayList;          import java.util.List;

       import org.apache.http.HttpEntity;
        import org.apache.http.HttpResponse;
        import org.apache.http.NameValuePair;
       import org.apache.http.client.HttpClient;
        import org.apache.http.client.entity.UrlEncodedFormEntity;
          import org.apache.http.client.methods.HttpGet;
       import org.apache.http.client.methods.HttpPost;
             import org.apache.http.impl.client.DefaultHttpClient;
         import org.apache.http.message.BasicNameValuePair;
         import org.apache.http.protocol.HTTP;
        import org.apache.http.util.EntityUtils;

      import android.app.Activity;
       import android.os.Bundle;
       import android.util.Log;
       import android.widget.TextView;

     public class ClientActivity extends Activity 
      {
TextView tv;
public  StringBuffer buffer;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    tv= (TextView)findViewById(R.id.tv);

    try {
        HttpClient client = new DefaultHttpClient();  
        String postURL = "http://10.0.2.2:8080/nik/DBConnection?UID=patients";
        HttpPost post = new HttpPost(postURL);
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("UID", "patients"));
            //params.add(new BasicNameValuePair("pass", "xyz"));
            UrlEncodedFormEntity ent = new UrlEncodedFormEntity(params,HTTP.UTF_8);
            post.setEntity(ent);
            HttpResponse responsePOST = client.execute(post);  
            HttpEntity resEntity = responsePOST.getEntity();  
            if (resEntity != null) {    
                //Log.i("RESPONSE",EntityUtils.toString(resEntity));
                buffer = new StringBuffer("");
                buffer.append(EntityUtils.toString(resEntity));

            }

           String String1= buffer.toString();
           Log.i("string-----",String1);
           tv.append(String1);



    } catch (Exception e) {
        e.printStackTrace();
    }

    try {
        HttpClient client = new DefaultHttpClient();  
        String getURL = "http://10.0.2.2:8080/nik/DBConnection?UID=patients";
        HttpGet get = new HttpGet(getURL);
        HttpResponse responseGet = client.execute(get);  
        HttpEntity resEntityGet = responseGet.getEntity();  
        if (resEntityGet != null) {  
                    //do something with the response
                    Log.i("GET RESPONSE",EntityUtils.toString(resEntityGet));

                }
} catch (Exception e) {
    e.printStackTrace();
}
}
}

这是我得到Hans Tan先生的结果“,”S2234567“,”75945422“,”20-11-1971“,”Chronic Hepatatis C“,”Copegus 400 mg“,”8“,” Ward3A-1,301“,但我需要解析它,所以请任何帮助将不胜感激。谢谢提前

1 个答案:

答案 0 :(得分:2)

您将使用JSONObject和/或JSONArray类来解析android上的JSON数据。

基本用法如下:

JSONObject jsonObject = new JSONObject(myJsonDataString);

JSONArray jsonArray = new JSONArray(myJsonDataString);

您可以在Android开发者页面上找到有关使用情况的更多信息,特别是herehere

小心:数据格式为:“[{'key':''value'}]”(我说的是[]')必须用JSONArray解析或者你会得到一个JSONException,说你的数据不是JSONObject。