在servlet中创建json对象

我想将检索到的数据从服务器发送到我的Android客户端…我使用了一个json对象来做到这一点。 这是我的servlet代码。

import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class AvailabilityResponse extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/json"); PrintWriter out=response.getWriter(); String br_id; br_id=request.getParameter("branchname"); try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection con=DriverManager.getConnection("jdbc:mysql://localhost:8888/atmlivedetails","root","root"); Statement st=con.createStatement(); ResultSet rs=st.executeQuery("select atmbrno, atmbrname from location_stat where act_brname='"+br_id+"'"); while(rs.next()){ String s = rs.getString("atmbrno"); String t = rs.getString("atmbrname"); JSONObject arrayObj = new JSONObject(); arrayObj.put("atmbrno",s); arrayObj.put("atmbrname",t); out.print(arrayObj); } rs.close (); st.close (); } catch(Exception e){ out.print(e); } } 

}

这是我的android端代码..

 import java.util.ArrayList; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.ParseException; import org.apache.http.message.BasicNameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.ClientProtocolException; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.content.Intent; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import android.os.Bundle; public class CheckAvailability extends Activity{ Button but1,but2; EditText brName; TextView txt1; String text; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.availability); brName =(EditText)findViewById(R.id.editText1); but1 = (Button)findViewById(R.id.button5); but2 = (Button)findViewById(R.id.button6); txt1 = (TextView)findViewById(R.id.textView3); but1.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ String result = null; InputStream is = null; StringBuilder sb=null; ArrayList postParameters = new ArrayList(); postParameters.add(new BasicNameValuePair("branchname", brName.getText().toString())); //http post try{ HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://10.0.2.2:8080/hello/AvailabilityResponse"); httppost.setEntity(new UrlEncodedFormEntity(postParameters)); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); }catch(Exception e){ Log.e("log_tag", "Error in http connection"+e.toString()); } //convert response to string try{ BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); sb = new StringBuilder(); sb.append(reader.readLine() + "\n"); String line="0"; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result=sb.toString(); }catch(Exception e){ Log.e("log_tag", "Error converting result "+e.toString()); } //paring data String atm_id; String atm_name; try{ JSONArray jArray = new JSONArray(result); JSONObject json_data=null; for(int i=0;i<jArray.length();i++){ json_data = jArray.getJSONObject(i); atm_id=json_data.getString("atmbrno"); atm_name=json_data.getString("atmbrname"); //txt1.setText(atm_name); } }catch(JSONException e1){ Toast.makeText(getBaseContext(), "No DATA Found", Toast.LENGTH_LONG).show(); }catch (ParseException e1){ e1.printStackTrace(); } } }); 

}}

但当我运行它它总是给我“没有找到数据”例外…任何人都可以帮助我???

您的servlet只返回N个JSON对象。 但是你给JSON数组的响应可能是错误在你的servlet中尝试这个代码

 try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection con=DriverManager.getConnection("jdbc:mysql://localhost:8888/atmlivedetails","root","root"); Statement st=con.createStatement(); ResultSet rs=st.executeQuery("select atmbrno, atmbrname from location_stat where act_brname='"+br_id+"'"); int i=0; JSONArray jArray = new JSONArray(); while(rs.next()){ String s = rs.getString("atmbrno"); String t = rs.getString("atmbrname"); JSONObject arrayObj = new JSONObject(); arrayObj.put("atmbrno",s); arrayObj.put("atmbrname",t); jArray.add(i,arrayObj); i++; } rs.close (); st.close (); out.print(jArray); } 

在处理json字符串(转换为json对象)之前打印来自服务器的响应,以便您可以跟踪实际原因。 你实际上得到了jsonexception。

写入outputstream ,您需要关闭Printwriter obejct。

 out.close() 

您需要将json-lib-2.4-jdk15.jar文件添加到项目类路径中,并使用以下代码创建JSON对象。

  JSONObject jsonData = new JSONObject(); jsonData.put("key1", "value1"); jsonData.put("key2", "value2"); jsonData.put("key3", "value3"); System.out.println("JSON data: "+jsonData.toString()); 

控制台您将获得输出:JSON数据:{“key1”:“value1”,“key2”:“value2”,“key3”:“value3”}