web-dev-qa-db-ja.com

Java)でHTTPリクエスト本文をJSONオブジェクトに変換する方法

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

理想的には、 Apache Sling ライブラリを使用したいと思います(コンテナ内で自然に公開されるため)。

私が見つけた最も近いもの:ヘッダーをJSONに変換するorg.Apache.sling.commons.json.http

HTTPPost本文は次の形式です。 key1=value1&key2=value2&..&keyn=valueNだから、そこに何かがあると思いますが、私はそれを見つけることができませんでした。

何かがまだ存在しない場合は、カスタムJSONTokenerorg.Apache.sling.commons.json.JSONTokener)を使用してこれを行う必要があるかもしれません。考え?

ありがとう

11
empire29

HttpServletjson-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"], ...}
}
12
maerics

import org.json.JSONObject;

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

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
1
johnnieb

ジャクソンも良い選択肢です-それは春に広く使われています。チュートリアルは次のとおりです。 http://wiki.fasterxml.com/JacksonInFiveMinutes

1
atrain

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

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

1
Markus Joschko