आप जावा सर्वलेट से एक JSON ऑब्जेक्ट कैसे लौटाते हैं


153

आप JSON ऑब्जेक्ट कैसे लौटाते हैं एक जावा सर्वलेट बनाते हैं।

पहले जब एक सर्वलेट के साथ AJAX कर रहा हूं तो मैंने एक स्ट्रिंग लौटा दी है। क्या कोई JSON ऑब्जेक्ट प्रकार है जिसका उपयोग करने की आवश्यकता है, या क्या आप केवल एक स्ट्रिंग लौटाते हैं जो JSON ऑब्जेक्ट जैसे दिखता है

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

10
nitpick; क्या आपको अधिक पसंद नहीं करना चाहिए { key1: value1, key2: value2 }?

14
नाइटपिक: वह वास्तव में क्या चाहता है {"key1": "value1", "key2": "value2"} ... :-)
फीलो

यदि आपने स्प्रिंग 3.2.0 का उपयोग करने का निर्णय लिया है तो @Ankur लिंक को चेकआउट करें ।
अमीरहद

5
नाइटपिक: हमें यह नहीं मान लेना चाहिए कि स्ट्रिंग्स स्ट्रिंग्स हैं, इसलिए वह वास्तव में क्या चाहता है {"key1": value1, "key2": value2}
NoBrainer

ये नाइटपिक्स (इस क्रम में esp), महाकाव्य हैं :)
अंकुर

जवाबों:


57

मैं वही करता हूं जो आप सुझाते हैं (वापसी String)।

आप यह इंगित करने के लिए MIME प्रकार सेट करने पर विचार कर सकते हैं कि आप JSON लौटा रहे हैं, हालांकि ( इस अन्य स्टैकओवरफ़्लो पोस्ट के अनुसार यह "एप्लिकेशन / json" है)।


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
इससे मुझे मदद मिली। जैसा कि मार्क इलियट के जवाब में बताया गया है, jsonObject एक स्ट्रिंग के रूप में जस का तस हो सकता है। दोहरे उद्धरण चिह्नों का उपयोग करना याद रखें, क्योंकि एकल उद्धरण आपको एक वैध जसन नहीं देंगे। Ex .:String jsonStr = "{\"my_key\": \"my_value\"}";
मार्सेलोक्रा

3
Response.setCharacterEncoding ("utf-8") का उपयोग करना अच्छा होगा; भी
erun

81

सबसे पहले JSON ऑब्जेक्ट को कन्वर्ट करें String। तो बस सामग्री के प्रकार के साथ प्रतिक्रिया लेखक के लिए इसे बाहर लिखेंapplication/json यूटीएफ -8 और चरित्र एन्कोडिंग ।

जावा ऑब्जेक्ट को JSON स्ट्रिंग में बदलने के लिए आप Google Gson का उपयोग कर रहे हैं, ऐसा एक उदाहरण है :

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);
}

बस इतना ही।

यह सभी देखें:


मैं जावास्क्रिप्ट को प्रतिक्रिया भेजने और चेतावनी में प्रतिक्रिया प्रदर्शित करने के लिए ऐसा कर रहा हूं। यह HTML कोड को अलर्ट के अंदर क्यों प्रदर्शित कर रहा है..क्योंकि मुझे प्रतिक्रिया के रूप में HTML कोड मिल रहा है। मैंने जैसा कहा वैसा ही किया।
अभि

मेरे पास @iLive
वैक्स

30

आप जावा सर्वलेट से एक JSON ऑब्जेक्ट कैसे लौटाते हैं

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());

संस्करण के आधार पर, JsonObject सार है। मैंने एक नए कार्यान्वयन का उत्तर बनाया।
राफेल बैरोस

8

बस आउटपुट स्ट्रीम के लिए एक स्ट्रिंग लिखें। यदि आप मददगार महसूस कर रहे हैं, तो आप MIME- प्रकार सेट कर सकते हैं text/javascript( संपादित करें : application/jsonजाहिरा तौर पर आधिकारिक)। (एक छोटा लेकिन नॉनज़रो मौका है कि यह किसी दिन इसे गड़बड़ करने से कुछ रखेगा, और यह एक अच्छा अभ्यास है।)


8

इसके लिए Gson बहुत उपयोगी है। आसान भी। यहाँ मेरा उदाहरण है:

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}]}

लोगों को कहना है कि अगर आपके वर्सन खाली हैं, तो यह आपके लिए जोंस का निर्माण नहीं करेगा

{}


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

जावा कोडिंग सुविधा के लिए JSON ऑब्जेक्ट हो सकता है। लेकिन अंत में डेटा संरचना को स्ट्रिंग के लिए क्रमबद्ध किया जाएगा। उचित MIME प्रकार सेट करना अच्छा होगा।

मैं jSON.org से JSON जावा का सुझाव दूंगा


गलत। आमतौर पर निर्माण का ओवरहेड जोड़ने का कोई कारण नहीं है String- आउटपुट को सीधे जाना चाहिए OutputStream। या, यदि किसी कारण से मध्यवर्ती रूप की आवश्यकता होती है, तो उपयोग कर सकते हैं byte[]। अधिकांश जावा JSON लाइब्रेरी सीधे लिख सकते हैं OutputStream
स्टैक्मैन मैन

7

जावा संस्करण पर निर्भर करता है (या JDK, SDK, JRE ... i dunno, im im to the new ecosystem), 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 ( "text / json");

// JSON स्ट्रिंग बनाएं, मैं कुछ ढांचे का उपयोग करने का सुझाव देता हूं।

स्ट्रिंग अपने_स्ट्रिंग;

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


क्या मुझे getBytes ("UTF-8") का उपयोग करने की आवश्यकता है या क्या मैं स्ट्रिंग स्ट्रिंग को वापस कर सकता हूं?
अंकुर

किसी वेब एप्लिकेशन की प्रतिक्रिया को एन्कोडिंग के लिए UTF-8 का उपयोग करना एक सुरक्षित प्रोग्रामिंग अभ्यास है।
RHT

0

बंद BalusC 4 सरल गूगल Gson lib का उपयोग कर लाइनों में जवाब। इस पंक्तियों को सर्वलेट विधि में जोड़ें:

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

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

सौभाग्य!


0

Gson का उपयोग करके आप कोड के नीचे 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();
    }

  }
}

जावा में सर्वलेट से json प्रतिक्रिया से मददगार


0

आप जैसे bellow का उपयोग कर सकते हैं।

यदि आप json सरणी का उपयोग करना चाहते हैं:

  1. json-simple-1.1.1.jar डाउनलोड करें और अपने प्रोजेक्ट क्लास पथ में जोड़ें
  2. मॉडल को Bellow की तरह एक वर्ग बनाएँ

    public class Model {
    
     private String id = "";
     private String name = "";
    
     //getter sertter here
    }
  3. सेवलेट getMethod में आप bellow की तरह उपयोग कर सकते हैं

    @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"}]

मैं चाहता हूँ कि json वस्तु का उपयोग करें जैसे:

@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"}

पूरा स्रोत GitHub को दिया गया है: https://github.com/enamul95/ServeletJson.git

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.