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

时间:2011-08-16 21:54:16

标签: java json http sling

我正在尝试找到一个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)来执行此操作。想法?

由于

6 个答案:

答案 0 :(得分:11)

假设您正在使用HttpServlet和JSON库,例如json-simple,您可以执行以下操作:

public JSONObject requestParamsToJSON(ServletRequest req) {
  JSONObject jsonObj = new JSONObject();
  Map<String,String[]> params = req.getParameterMap();
  for (Map.Entry<String,String[]> 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.
  // e.g. {"key1":"value1", "key2":["value2a", "value2b"], ...}
}

答案 1 :(得分:1)

杰克逊也是一个不错的选择 - 它在春季广泛使用。以下是教程:http://wiki.fasterxml.com/JacksonInFiveMinutes

答案 2 :(得分:1)

我建议您尝试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

答案 3 :(得分:1)

很抱歉这是一个自己的答案,但显然我的声誉不允许我只是简单地添加评论来回答How to convert HTTP Request Body into JSON Object in Java maerics。

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

答案 4 :(得分:0)

导入org.json.JSONObject;

 JSONObject json = new JSONObject(request.getParameterMap())

答案 5 :(得分:-1)

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

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

可以像这样检索Json对象:

public class RetrieveData {

      private Meta meta;
      private List<Data> data;

      public Meta getMeta(){
            return meta;
      }

      public List<Data> 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