如何在Android中解析JSON数据 [英] How to parse JSON data in Android
问题描述
可能重复:
在Android中发送和解析JSON
Possible Duplicate:
Sending and Parsing JSON in Android
我正在从服务器获取JSON数据,并且已经通过代码获取了JSON数据.但是我不知道如何解析它.
I am fetching JSON Data from server and I have already got JSON Data by code. But I didn't understand how to parse it.
这是我的服务器代码,我正在从mysql数据库中获取数据,然后发送到android 设备
Here is my code for server i am fetching data from mysql database and then sending to android device
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);
}
}
这是我的android代码 导入java.util.ArrayList; 导入java.util.List;
And here is my android code 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,"慢性肝炎C," Copegus 400 mg," 8,"的结果Ward3A-1,301,但我需要解析它,因此请您提供任何帮助.谢谢
And this is the result that i am getting Mr Hans Tan","S2234567","75945422","20-11-1971","Chronic Hepatatis C","Copegus 400 mg","8","Ward3A-1,301" ,but i need to parse it so please any help will be appreciated .Thanks in advance
推荐答案
您将使用JSONObject和/或JSONArray类在android上解析JSON数据.
You'll use the JSONObject and/or JSONArray class to parse JSON data on android.
基本用法如下:
JSONObject jsonObject = new JSONObject(myJsonDataString);
和
JSONArray jsonArray = new JSONArray(myJsonDataString);
您可以在Android开发人员页面上找到有关用法的更多信息,特别是此处和此处.
You can find more info on the usage at the Android Developers Page, specifically here and here.
注意:必须使用JSONArray解析以下格式的数据:"[{'key':'value'}]"(我是在谈论[])否则您会收到一个JSONException异常,说您的数据不是JSONObject.
Be careful: data in the format: "[{'key':''value'}]" (I'm talking about the []'s) has to be parsed with JSONArray or you'll get a JSONException raised saying that your data isn't a JSONObject.
这篇关于如何在Android中解析JSON数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!