11

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

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

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

HTTP Post 正文的格式为;key1=value1&key2=value2&..&keyn=valueN所以我认为那里有一些东西,但我还没有找到它。

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

谢谢

4

6 回答 6

13

假设您使用的是HttpServlet和像json-simple这样的 JSON 库,您可以执行以下操作:

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"], ...}
}
于 2011-08-16T22:07:32.037 回答
1

Jackson 也是一个不错的选择——它在 Spring 中被广泛使用。这是教程:http ://wiki.fasterxml.com/JacksonInFiveMinutes

于 2011-08-16T22:18:24.680 回答
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
于 2011-08-17T15:00:36.833 回答
1

很抱歉将此作为自己的答案,但显然我的声誉不允许我简单地添加评论到答案How to convert HTTP Request Body into JSON Object in Java of maerics。

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

于 2011-08-17T19:51:10.813 回答
1

导入 org.json.JSONObject;

 JSONObject json = new JSONObject(request.getParameterMap())
于 2018-11-29T15:20:47.143 回答
-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;
      }

}

你的指示很简单。Content 是您的 Page 的内容,您可以使用 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
于 2011-08-17T15:30:58.707 回答