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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 08:35:09  来源:igfitidea点击:

Create json object in servlet

javaandroidjsonservlets

提问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 Printwriterobejct 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"}