2011-08-16 58 views
5

Tôi đang cố gắng tìm một Java lib/api cho phép tôi chuyển nội dung của một HTTP Request POST body thành một đối tượng JSON.Làm thế nào để chuyển đổi HTTP Request Body thành JSON Object trong Java

Lý tưởng nhất là tôi muốn sử dụng thư viện Apache Sling (vì chúng được tự nhiên tiếp xúc trong vùng chứa của tôi).

Gần nhất tôi đã tìm thấy nó: org.apache.sling.commons.json.http chuyển đổi tiêu đề thành JSON.

Cơ quan Bưu điện HTTP có định dạng; key1=value1&key2=value2&..&keyn=valueN vì vậy tôi cho rằng có điều gì đó ngoài kia, nhưng tôi đã không thể tìm thấy nó.

Tôi chỉ có thể sử dụng tùy chỉnh JSONTokener (org.apache.sling.commons.json.JSONTokener) để thực hiện việc này nếu có điều gì đó chưa tồn tại. Suy nghĩ?

Cảm ơn

Trả lời

10

Giả sử bạn đang sử dụng một HttpServlet và thư viện JSON như json-simple bạn có thể làm một cái gì đó như thế này:

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; 
} 

Với ví dụ sử dụng:

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"], ...} 
} 
+3

hóa ra bạn có thể làm: JSONObject json = new JSONObject (slingHttpServletRequest.getParameterMap()); cũng như - phương pháp của bạn cho phép kiểm soát nhiều hơn đối với những gì được cho phép vào đối tượng json (chẳng hạn như giới thiệu một danh sách trắng/đen) - điều này rất hay. – empire29

+0

Xin chào, tôi đã tải xuống thư viện JSON từ liên kết bạn đã cung cấp ở trên. Làm thế nào tôi có thể sử dụng nó ngay bây giờ. bạn có thể đề cập đến nó không ?? –

+0

@ empire29: Thông tin chi tiết hơn về nó rất đáng được đánh giá cao. –

1

Tôi khuyên bạn nên thử 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 
0

Sử dụng Gson. Với điều này, bạn có thể tạo lớp với các biến riêng tư đại diện cho dữ liệu bạn muốn: ví dụ.

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

Json Object có thể lấy như thế này:

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; 
     } 

} 

Và hướng dẫn của bạn rất đơn giản. Nội dung là nội dung của Trang của bạn, bạn có thể truy xuất nó bằng 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 
1

Xin lỗi về việc này một câu trả lời riêng nhưng rõ ràng danh tiếng của tôi không cho phép tôi chỉ cần thêm một bình luận cho câu trả lời How to convert HTTP Request Body into JSON Object in Java của maerics.

Tôi cũng sẽ lặp lại thông số yêu cầu nhưng thay vì sử dụng thư viện json tùy ý, hãy sử dụng JSONObject do sling cung cấp. http://sling.apache.org/apidocs/sling6/org/apache/sling/commons/json/JSONObject.html

Các vấn đề liên quan