5

json 応答を返す http get 要求を作成しようとしています。json 応答からの値の一部をセッションに保存する必要があります。私はこれを持っています:

public String getSessionKey(){
    BufferedReader rd  = null;
    StringBuilder sb = null;
    String line = null;
    try {
         URL url = new URL(//url here);
         HttpURLConnection connection = (HttpURLConnection) url.openConnection();
         connection.setRequestMethod("GET");
         connection.connect();
         rd  = new BufferedReader(new InputStreamReader(connection.getInputStream()));
          sb = new StringBuilder();

          while ((line = rd.readLine()) != null)
          {
              sb.append(line + '\n');
          }
          return sb.toString();

     } catch (MalformedURLException e) {
         e.printStackTrace();
     } catch (ProtocolException e) {
         e.printStackTrace();
     } catch (IOException e) {
         e.printStackTrace();
     }

    return "";
}

これは JSON を文字列で返します。

{ "StatusCode": 0, "StatusInfo": "Processed and Logged OK", "CustomerName": "Mr API"}

StatusCode と CustomerName をセッションに保存する必要があります。JavaでJSONを返すにはどうすればよいですか?

ありがとう

4

6 に答える 6

6

JSON ライブラリを使用します。これはジャクソンの例です:

ObjectMapper mapper = new ObjectMapper();

JsonNode node = mapper.readTree(connection.getInputStream());

// Grab statusCode with node.get("StatusCode").intValue()
// Grab CustomerName with node.get("CustomerName").textValue()

これは、返された JSON の有効性をチェックしないことに注意してください。これには、JSON スキーマを使用できます。利用可能な Java 実装があります。

于 2013-01-06T18:32:34.387 に答える
3

セッション ストレージには、Aplication コンテキスト クラスのApplicationを使用するか、静的グローバル変数を使用できます。

HttpURLConnection から JSON を解析するには、次のようなメソッドを使用できます。

public JSONArray getJSONFromUrl(String url) {
    JSONArray jsonArray = null;

    try {
        URL u = new URL(url);
        httpURLConnection = (HttpURLConnection) u.openConnection();
        httpURLConnection.setRequestMethod("GET");
        bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));
        stringBuilder = new StringBuilder();

        while ((line = bufferedReader.readLine()) != null) {
            stringBuilder.append(line + '\n');
        }
        jsonString = stringBuilder.toString();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (ProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        httpURLConnection.disconnect();
    }

    try {
        jsonArray = new JSONArray(jsonString);
    } catch (JSONException e) {
        e.printStackTrace();
    }

    return jsonArray;
}
于 2013-09-24T20:36:02.333 に答える
1

json をオブジェクトに、またはその逆に変換するための GSON ライブラリを確認してください。

http://code.google.com/p/google-gson/

于 2013-01-06T18:31:44.307 に答える
1

Gsonを使用できます。これがあなたを助けるコードです:

Map<String, Object> jsonMap;  
Gson gson = new Gson();  
Type outputType = new TypeToken<Map<String, Object>>(){}.getType();  
jsonMap = gson.fromJson("here your string", outputType);

これで、それらを取得してセッションに入れる方法がわかりました。classpath に Gson ライブラリを含める必要があります

于 2013-12-23T09:50:21.327 に答える
0

Service または AsyncTask を使用するための呼び出しでパラメーターを使用するメソッド

public JSONArray getJSONFromUrl(String endpoint, Map<String, String> params)
        throws IOException
{
    JSONArray jsonArray = null;
    String jsonString = null;
    HttpURLConnection conn = null;
    String line;

    URL url;
    try
    {
        url = new URL(endpoint);
    }
    catch (MalformedURLException e)
    {
        throw new IllegalArgumentException("invalid url: " + endpoint);
    }

    StringBuilder bodyBuilder = new StringBuilder();
    Iterator<Map.Entry<String, String>> iterator = params.entrySet().iterator();
    // constructs the POST body using the parameters
    while (iterator.hasNext())
    {
        Map.Entry<String, String> param = iterator.next();
        bodyBuilder.append(param.getKey()).append('=')
                .append(param.getValue());
        if (iterator.hasNext()) {
            bodyBuilder.append('&');
        }
    }

    String body = bodyBuilder.toString();
    byte[] bytes = body.getBytes();
    try {

        conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setUseCaches(false);
        conn.setFixedLengthStreamingMode(bytes.length);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
        // post the request
        OutputStream out = conn.getOutputStream();
        out.write(bytes);
        out.close();
        // handle the response
        int status = conn.getResponseCode();

        if (status != 200) {
            throw new IOException("Post failed with error code " + status);
        }

        BufferedReader  bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        StringBuilder stringBuilder = new StringBuilder();


        while ((line = bufferedReader.readLine()) != null)
        {
            stringBuilder.append(line + '\n');
        }

        jsonString = stringBuilder.toString();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (ProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        conn.disconnect();
    }

    try {
        jsonArray = new JSONArray(jsonString);
    } catch (JSONException e) {
        e.printStackTrace();
    }

    return jsonArray;
}
于 2015-09-07T11:43:26.573 に答える