java 在servlet中创建json对象
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12364036/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Create json object in servlet
提问by Dasaya
I want to send retrieved data from sever to my Android client... I used a json object to do that. Here is my servlet code.
我想将检索到的数据从服务器发送到我的 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);
}
}
}
}
And This is my android side code..
这是我的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<NameValuePair> postParameters = new ArrayList<NameValuePair>();
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();
}
}
});
} }
} }
but when i run it it always gives me "No DATA Found" Exception...can any one help me???
但是当我运行它时,它总是给我“找不到数据”异常......有人可以帮助我吗???
回答by ponraj
Your servlet returns only N number of JSON objects. But your giving that response to JSON array it may be the mistake try this code in your servlet
您的 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);
}
回答by sreemanth pulagam
print the response from server, before processing json string(converting to json object) so that you can track actual reason. U are getting json exception actually.
在处理 json 字符串(转换为 json 对象)之前打印来自服务器的响应,以便您可以跟踪实际原因。你实际上得到了 json 异常。
回答by UVM
After writing to the outputstream
, you need to close the Printwriter
obejct like this.
写入后outputstream
,您需要Printwriter
像这样关闭对象。
out.close()
回答by Yogendra Joshi
You need to add json-lib-2.4-jdk15.jar file to your project class-path and use following code to create JSON object.
您需要将 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());
Console you will get output: JSON data: {"key1":"value1","key2":"value2","key3":"value3"}
控制台你会得到输出:JSON data: {"key1":"value1","key2":"value2","key3":"value3"}