如何在Java中将HTTP请求体转换为JSON对象

我正在尝试找到一个Java lib / api,它允许我将HTTP Request POST主体的内容转换为JSON对象。

理想情况下,我想使用Apache Sling库(因为它们在我的容器中自然暴露)。

最接近我发现它: org.apache.sling.commons.json.http将标头转换为JSON。

HTTP Post主体采用格式; key1=value1&key2=value2&..&keyn=valueN所以我假设有一些东西,但我找不到它。

如果某些东西不存在,我可能只需要使用自定义JSONTokenerorg.apache.sling.commons.json.JSONTokener )来执行此操作。 思考?

谢谢

假设您正在使用HttpServlet和json- like这样的JSON库,您可以执行以下操作:

 public JSONObject requestParamsToJSON(ServletRequest req) { JSONObject jsonObj = new JSONObject(); Map params = req.getParameterMap(); for (Map.Entry entry : params.entrySet()) { String v[] = entry.getValue(); Object o = (v.length == 1) ? v[0] : v; jsonObj.put(entry.getKey(), o); } return jsonObj; } 

使用示例:

 public void doPost(HttpServletRequest req, HttpServletResponse res) { JSONObject jsonObj = requestParamsToJSON(req); // Now "jsonObj" is populated with the request parameters. // eg {"key1":"value1", "key2":["value2a", "value2b"], ...} } 

jackson也是一个不错的选择 – 它在春季广泛使用。 这是教程: http : //wiki.fasterxml.com/JacksonInFiveMinutes

我建议尝试使用Apache Commons Beanutils 。

 ServeltRequest request; Map map = request.getParameterMap(); MyObject object = new MyObject(); BeanUtils.populate(object, map); String json = object.toJSON() //using any JSON library 

很抱歉这是一个自己的答案,但显然我的声誉不允许我简单地添加注释答案如何将HTTP请求体转换为Java中的JSON对象 。

我还会遍历请求参数但不使用任意json库而是使用sling提供的JSONObject。 http://sling.apache.org/apidocs/sling6/org/apache/sling/commons/json/JSONObject.html

使用Gson。 通过这种方法,您可以使用表示所需数据的私有变量创建类:例如。

 meta:{ name:"Example" firstname:"Example2" } data:[ { title:"ecaetra" description:"qwerty" } ... ] 

可以像这样检索Json对象:

 public class RetrieveData { private Meta meta; private List data; public Meta getMeta(){ return meta; } public List getData(){ return data; } } public class Meta { private String name; private String firstname; public String getName(){ return name; } public String getFirstName(){ return firstname; } } public class Data { private String title; private String description; public String getTitle(){ return title; } public String getDescription(){ return description; } } 

你的指导很简单。 内容是您网页的内容,您可以使用Asynctask检索它。

  Object o = new Gson().fromJson(Content, RetrieveData.class); data = (RetrieveData)o; // Get Meta data.getName(); // Example data.getFirstName(); // Example2 // Get Data data.get(0).getTitle(); // position 0 : ecaetra data.get(0).getDescription(); // position 0 : qwerty