如何从Java Servlet返回JSON对象

How do you return a JSON object from a Java Servlet

你怎么回到JSON对象格式Java伺服器。

在用伺服服服务器做阿杰克斯时,我已经恢复了弦乐。复制这个网站码到您的网站上以设置一个投票箱在您的网站上。

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


将JSON对象写入响应对象的输出流。

您还应该按以下方式设置内容类型,这将指定您要返回的内容:

1
2
3
4
5
6
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();


首先将json对象转换为String。然后把它连同application/json的内容类型和utf-8的字符编码一起写给响应编写器。

下面是一个示例,假设您使用谷歌GSON将Java对象转换为JSON字符串:

1
2
3
4
5
6
7
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);
}

这就是全部。

参见:

  • 如何使用servlet和ajax?
  • 正确的JSON内容类型是什么?


我完全按照你的建议做(返回一个String)。

不过,您可以考虑将mime类型设置为指示您正在返回json(根据另一篇stackoverflow文章,它是"application/json")。


How do you return a JSON object from a Java Servlet

1
2
3
4
5
6
7
8
9
10
11
12
13
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.put("Mobile", 9999988888);
    json.put("Name","ManojSarnaik");

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


GSON对此非常有用。更容易。下面是我的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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());
}

}

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

out.print(json);

{"nombre":"juan","apellido":"machado","datosCriticos":[{"edad":12}]}

如果你的var在使用gson时是空的,就必须告诉别人它不会为你构建json。

{}


只需将字符串写入输出流。如果您觉得有帮助,可以将mime类型设置为text/javascript(编辑:application/json显然是官方的)。(有一个很小但非零的机会,它可以防止某天某个东西弄乱它,这是一个很好的实践。)


我使用杰克逊将Java对象转换为JSON字符串,并按如下方式发送。

1
2
3
4
5
6
7
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();

可能有JSON对象用于Java编码的便利性。但最终数据结构将被序列化为字符串。设置一个合适的mime类型是很好的。

我建议JSON.org提供JSON Java。


取决于Java版本(或JDK、SDK、JRE…我不知道,我是Java生态系统的新手,EDCOX1 5是抽象的。因此,这是一个新的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
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());
}

response.setContentType("文本/json");

//创建JSON字符串,我建议使用一些框架。

把你的线串起来;

out.write(your_string.getbytes("utf-8"));


使用google gson lib在4行中接近balusc答案。将此行添加到servlet方法:

1
2
3
4
5
User objToSerialize = new User("Bill","Gates");    
ServletOutputStream outputStream = response.getOutputStream();

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

祝你好运!