11

HTTP リクエスト POST ボディの内容を JSON オブジェクトに変換できるようにする Java lib/api を見つけようとしています。

理想的には、 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

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

これを独自の回答にして申し訳ありませんが、明らかに私の評判では、Java of maericsで HTTP リクエストボディを JSON オブジェクトに変換する方法へのコメントを単純に追加することはできません。

また、リクエスト パラメータを反復処理しますが、任意の json ライブラリを使用する代わりに、sling によって提供される JSONObject を使用します。http://sling.apache.org/apidocs/sling6/org/apache/sling/commons/json/JSONObject.html

于 2011-08-17T19:51:10.813 に答える
1

Jackson も良いオプションです。Spring で広く使用されています。チュートリアルは次のとおりです: http://wiki.fasterxml.com/JacksonInFiveMinutes

于 2011-08-16T22:18:24.680 に答える
-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
于 2011-08-17T15:30:58.707 に答える