我正在尝试找到一个Java lib / api,它允许我将HTTP Request 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
)来执行此操作。想法?
由于
答案 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