আপনি কীভাবে কোনও জাভা সার্লেট থেকে কোনও জেএসএন বস্তুটি ফেরত পাবেন


153

আপনি কীভাবে JSON অবজেক্টটিকে জাভা সার্লেট হিসাবে ফর্ম করবেন।

পূর্বে সার্ভলেট দিয়ে এজেএক্স করার সময় আমি একটি স্ট্রিং ফিরিয়ে দিয়েছি। এমন কোনও জেএসওএন অবজেক্টের ধরণ রয়েছে যা ব্যবহার করা দরকার, বা আপনি কেবল একটি স্ট্রিং ফিরিয়েছেন যা জেএসওএন অবজেক্টের মতো দেখতে পাওয়া যায় যেমন

String objectToReturn = "{ key1: 'value1', key2: 'value2' }";

10
Nitpick; তোমার কি আর পছন্দ করা উচিত নয় { key1: value1, key2: value2 }?

14
নিতপিক: তিনি যা চান তা হ'ল হ'ল হ'ল: "কী 1": "মান 1", "কী 2": "মান 2"} ... :-)
ফিলিহ

আপনি স্প্রিং ৩.২.০ ব্যবহার করার সিদ্ধান্ত নিলে অংকুর লিঙ্কটি চেকআউট করুন ।
আমির এইচডি

5
নিতপিক: আমাদের মানগুলি স্ট্রিংস হিসাবে ধরে নেওয়া উচিত নয়, তাই তিনি যা চান তা হ'ল key "কী 1": মান 1, "কী 2": মান 2}
নোব্রেনার

এই নিতপিকস (এই ক্রমটি অনুসারে), মহাকাব্য :)
অঙ্কুর

উত্তর:


57

আপনার পরামর্শ অনুসারে আমি ঠিক তাই করি (ফিরে আসুন String)।

আপনি জেএসওএন ফিরে আসছেন তা বোঝাতে আপনি মাইম টাইপ সেট করার বিষয়টি বিবেচনা করতে পারেন, যদিও ( এই অন্যান্য স্ট্যাকওভারফ্লো পোস্ট অনুসারে এটি "অ্যাপ্লিকেশন / জসন")।


175

প্রতিক্রিয়াযুক্ত বস্তুর আউটপুট প্রবাহে JSON অবজেক্টটি লিখুন।

আপনাকে নিম্নলিখিত বিষয়বস্তুর ধরণটিও সেট করা উচিত, যা আপনি কী ফিরিয়ে দিচ্ছেন তা নির্দিষ্ট করবে:

response.setContentType("application/json");
// Get the printwriter object from response to write the required json object to the output stream      
PrintWriter out = response.getWriter();
// Assuming your json object is **jsonObject**, perform the following, it will return your json object  
out.print(jsonObject);
out.flush();

7
এটি আমাকে সাহায্য করেছিল। মার্ক এলিয়ট উত্তরে উল্লিখিত হিসাবে, জসনঅবজেক্টটি একটি স্ট্রিংটি একটি জসন হিসাবে ফর্ম্যাট করা যেতে পারে। ডাবল উক্তি ব্যবহার করতে ভুলবেন না, কারণ একক উদ্ধৃতি আপনাকে বৈধ জেএসন দেয় না। প্রাক্তন:String jsonStr = "{\"my_key\": \"my_value\"}";
মার্সেলোক্রোক

3
প্রতিক্রিয়া.সেটচ্যারাক্টর এনকোডিং ("utf-8") ব্যবহার করা ভাল হবে; খুব
এরহুন

81

প্রথমে JSON অবজেক্টে রূপান্তর করুন String। তারপরে কেবল এটি application/jsonইউটিএফ -8 এর সামগ্রীর ধরণ এবং চরিত্রের এনকোডিং সহ প্রতিক্রিয়া লেখককে লিখুন ।

এখানে জাভা অবজেক্টকে জেএসএন স্ট্রিংয়ে রূপান্তর করতে আপনি গুগল জিসন ব্যবহার করছেন বলে ধরে নেওয়া একটি উদাহরণ রয়েছে :

protected void doXxx(HttpServletRequest request, HttpServletResponse response) {
    // ...

    String json = new Gson().toJson(someObject);
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(json);
}

এখানেই শেষ.

আরো দেখুন:


আমি জাভাস্ক্রিপ্টের প্রতিক্রিয়া প্রেরণ এবং সতর্কতার সাথে প্রতিক্রিয়া প্রদর্শন করতে এটি করছি। এটি সতর্কতার ভিতরে এইচটিএমএল কোডটি কেন প্রদর্শিত হচ্ছে..আমি কেন প্রতিক্রিয়া হিসাবে এইচটিএমএল কোড পাচ্ছি? আমি যেমন বলেছিলাম ঠিক তেমন কাজ করেছি।
অভি

আমার @ ইলাইভ
মোম

30

আপনি কীভাবে কোনও জাভা সার্লেট থেকে কোনও জেএসএন বস্তুটি ফেরত পাবেন

response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();

  //create Json Object
  JsonObject json = new JsonObject();

    // put some value pairs into the JSON object .
    json.addProperty("Mobile", 9999988888);
    json.addProperty("Name", "ManojSarnaik");

    // finally output the json string       
    out.print(json.toString());

সংস্করণের উপর নির্ভর করে, জসনঅবজেক্টটি বিমূর্ত। আমি একটি নতুন বাস্তবায়নের উত্তর তৈরি করেছি।
রাফায়েল ব্যারোস

8

আউটপুট প্রবাহে কেবল একটি স্ট্রিং লিখুন। আপনি যদি সহায়ক বোধ করেন তবে আপনি মাইম-টাইপ সেট করতে পারেন text/javascript( সম্পাদনা করুন : application/jsonআপাতদৃষ্টিতে অফিশিয়লার)। (একটি ছোট্ট তবে ননজারো সুযোগ রয়েছে যে এটি কোনও দিন এলোমেলো করে দেওয়া থেকে কিছু রক্ষা করবে এবং এটি একটি ভাল অনুশীলন))


8

গসন এটির জন্য খুব উপকারী। এমনকি সহজ। এখানে আমার উদাহরণ:

public class Bean {
private String nombre="juan";
private String apellido="machado";
private List<InnerBean> datosCriticos;

class InnerBean
{
    private int edad=12;

}
public Bean() {
    datosCriticos = new ArrayList<>();
    datosCriticos.add(new InnerBean());
}

}

    Bean bean = new Bean();
    Gson gson = new Gson();
    String json =gson.toJson(bean);

out.print (JSON);

{ "Nombre": "জুয়ান", "apellido": "মাচাদো", "datosCriticos": [{ "edad": 12}]}

লোকেরা বলতে হবে যদি আপনার ভারসামি খালি থাকে তবে জিএসএন ব্যবহার করার সময় এটি আপনার জন্য জসন তৈরি করে না ust কেবলমাত্র

{}


8

আমি জ্যাকসনটিকে জাভা অবজেক্টকে জেএসএন স্ট্রিংয়ে রূপান্তর করতে এবং নীচে পাঠানোর জন্য ব্যবহার করেছি ।

PrintWriter out = response.getWriter();
ObjectMapper objectMapper= new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(MyObject);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
out.print(jsonString);
out.flush();

7

জাভা কোডিং সুবিধার জন্য কোনও জেএসএন অবজেক্ট থাকতে পারে। কিন্তু শেষ পর্যন্ত ডেটা স্ট্রাকচারটি স্ট্রিংয়ে সিরিয়ালাইজ করা হবে। একটি যথাযথ MIME টাইপ সেট করা দুর্দান্ত হবে be

আমি json.org থেকে JSON জাভা পরামর্শ দিই ।


ত্রুটিপূর্ণ. সাধারণত কোনও নির্মাণের ওভারহেড যুক্ত করার কোনও কারণ নেই String- আউটপুটটি সরাসরি যেতে হবে OutputStream। বা, যদি কোনও কারণে মধ্যবর্তী ফর্মের প্রয়োজন হয় তবে এটি ব্যবহার করতে পারেন byte[]। বেশিরভাগ জাভা জেএসএন লাইব্রেরি সরাসরি লিখতে পারে OutputStream
স্ট্যাক্সমান

7

জাভা সংস্করণ (বা জেডিকে, এসডিকে, জেআরই ... আমি জানি, জাভা বাস্তুতন্ত্রের ক্ষেত্রে আমি নতুন), এটি JsonObjectবিমূর্ত। সুতরাং, এটি একটি নতুন বাস্তবায়ন:

import javax.json.Json;
import javax.json.JsonObject;

...

try (PrintWriter out = response.getWriter()) {
    response.setContentType("application/json");       
    response.setCharacterEncoding("UTF-8");

    JsonObject json = Json.createObjectBuilder().add("foo", "bar").build();

    out.print(json.toString());
}

3

response.setContentType ( "টেক্সট / JSON");

// জেএসএন স্ট্রিং তৈরি করুন, আমি কিছু ফ্রেমওয়ার্ক ব্যবহার করার পরামর্শ দিচ্ছি।

আপনার স্ট্রিং স্ট্রিং;

out.write (your_string.getBytes ( "হল UTF-8"));


আমার কি getBytes ("ইউটিএফ -8") ব্যবহার করা দরকার বা আমি কেবল স্ট্রিং ভেরিয়েবলটি ফিরিয়ে দিতে পারি?
অঙ্কুর

ওয়েব অ্যাপ্লিকেশনটির প্রতিক্রিয়া এনকোডিংয়ের জন্য ইউটিএফ -8 ব্যবহার করা একটি নিরাপদ প্রোগ্রামিং অনুশীলন।
আরএইচটি

0

যাও বন্ধ BalusC 4 সহজ গুগল Gson liberal এর সংক্ষিপ্ত রূপ ব্যবহার লাইনে উত্তর। সার্লেট পদ্ধতিতে এই লাইনগুলি যুক্ত করুন:

User objToSerialize = new User("Bill", "Gates");    
ServletOutputStream outputStream = response.getOutputStream();

response.setContentType("application/json;charset=UTF-8");
outputStream.print(new Gson().toJson(objToSerialize));

শুভকামনা!


0

জসন ব্যবহার করে আপনি নীচে কোড দেখতে json প্রতিক্রিয়া পাঠাতে পারেন

আপনি এই কোড দেখতে পারেন

@WebServlet(urlPatterns = {"/jsonResponse"})
public class JsonResponse extends HttpServlet {

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("application/json");
    response.setCharacterEncoding("utf-8");
    Student student = new Student(12, "Ram Kumar", "Male", "1234565678");
    Subject subject1 = new Subject(1, "Computer Fundamentals");
    Subject subject2 = new Subject(2, "Computer Graphics");
    Subject subject3 = new Subject(3, "Data Structures");
    Set subjects = new HashSet();
    subjects.add(subject1);
    subjects.add(subject2);
    subjects.add(subject3);
    student.setSubjects(subjects);
    Address address = new Address(1, "Street 23 NN West ", "Bhilai", "Chhattisgarh", "India");
    student.setAddress(address);
    Gson gson = new Gson();
    String jsonData = gson.toJson(student);
    PrintWriter out = response.getWriter();
    try {
        out.println(jsonData);
    } finally {
        out.close();
    }

  }
}

জাভাতে সার্লেট থেকে জসন প্রতিক্রিয়া থেকে সহায়ক


0

আপনি bellow মত ব্যবহার করতে পারেন।

আপনি যদি জসন অ্যারে ব্যবহার করতে চান:

  1. json-simple-1.1.1.jar ডাউনলোড করুন এবং আপনার প্রকল্পের শ্রেণীর পথে যুক্ত করুন
  2. নমোর মতো মডেল নামে একটি শ্রেণি তৈরি করুন

    public class Model {
    
     private String id = "";
     private String name = "";
    
     //getter sertter here
    }
  3. Sevlet getMethod এ আপনি বেলোর মতো ব্যবহার করতে পারেন

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    
      //begin get data from databse or other source
      List<Model> list = new ArrayList<>();
      Model model = new Model();
      model.setId("101");
      model.setName("Enamul Haque");
      list.add(model);
    
      Model model1 = new Model();
      model1.setId("102");
      model1.setName("Md Mohsin");
      list.add(model1);
      //End get data from databse or other source
    try {
    
        JSONArray ja = new JSONArray();
        for (Model m : list) {
            JSONObject jSONObject = new JSONObject();
            jSONObject.put("id", m.getId());
            jSONObject.put("name", m.getName());
            ja.add(jSONObject);
        }
        System.out.println(" json ja = " + ja);
        response.addHeader("Access-Control-Allow-Origin", "*");
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().print(ja.toString());
        response.getWriter().flush();
       } catch (Exception e) {
         e.printStackTrace();
      }
    
     }
  4. আউটপুট :

        [{"name":"Enamul Haque","id":"101"},{"name":"Md Mohsin","id":"102"}]

আমি চাই আপনি জসন অবজেক্টের মতো ব্যবহার করুন:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    try {

        JSONObject json = new JSONObject();
        json.put("id", "108");
        json.put("name", "Enamul Haque");
        System.out.println(" json JSONObject= " + json);
        response.addHeader("Access-Control-Allow-Origin", "*");
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().print(json.toString());
        response.getWriter().flush();
        // System.out.println("Response Completed... ");
    } catch (Exception e) {
        e.printStackTrace();
    }

}

উপরের ফাংশন আউটপুট :

{"name":"Enamul Haque","id":"108"}

সম্পূর্ণ উত্সটি গিটহাবকে দেওয়া হয়েছে: https://github.com/enamul95/ServeletJson.git

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.