code

Java HTTPResponse에서 JSON을 어떻게 구문 분석합니까?

codestyles 2020. 10. 30. 08:06
반응형

Java HTTPResponse에서 JSON을 어떻게 구문 분석합니까?


방금 만든 웹 요청에 대한 HttpResponse 개체가 있습니다. 응답은 JSON 형식이므로 구문 분석해야합니다. 터무니없이 복잡한 방법으로 할 수 있지만 더 나은 방법이있을 것 같습니다.

이것이 내가 할 수있는 최선인가?

    HttpResponse response; // some response object
    Reader in = new BufferedReader(
        new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
    StringBuilder builder= new StringBuilder();
    char[] buf = new char[1000];
    int l = 0;
    while (l >= 0) {
        builder.append(buf, 0, l);
        l = in.read(buf);
    }
    JSONTokener tokener = new JSONTokener( builder.toString() );
    JSONArray finalResult = new JSONArray( tokener );

차이가 있다면 나는 Android를 사용하고 있습니다.


보다 효율적으로 수행 할 수있는 두 가지 :

  1. 더 빠르고 동생이기 때문에 StringBuilder대신 사용하십시오 StringBuffer.
  2. BufferedReader#readLine()한 줄씩 읽는 대신 한 줄씩 읽는 데 사용 합니다.

HttpResponse response; // some response object
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
StringBuilder builder = new StringBuilder();
for (String line = null; (line = reader.readLine()) != null;) {
    builder.append(line).append("\n");
}
JSONTokener tokener = new JSONTokener(builder.toString());
JSONArray finalResult = new JSONArray(tokener);

JSON이 실제로 한 줄이면 루프와 빌더를 제거 할 수도 있습니다.

HttpResponse response; // some response object
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
String json = reader.readLine();
JSONTokener tokener = new JSONTokener(json);
JSONArray finalResult = new JSONArray(tokener);

JSON Simple 사용,

http://code.google.com/p/json-simple/

설치 공간이 적고 종속성이 없으므로 Android에 적합합니다.

이런 식으로 할 수 있습니다.

Object obj=JSONValue.parse(buffer.tString());
JSONArray finalResult=(JSONArray)obj;

구문 분석을 위해 Gson 라이브러리를 사용할 수 있습니다.

void getJson() throws IOException {
    HttpClient  httpClient = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet("some url of json");
    HttpResponse httpResponse = httpClient.execute(httpGet);
    String response = EntityUtils.toString(httpResponse.getEntity());

    Gson gson = new Gson();
    MyClass myClassObj = gson.fromJson(response, MyClass.class);

}

here is sample json file which is fetchd from server

{
"id":5,
"name":"kitkat",
"version":"4.4"
}

here is my class

class MyClass{
int id;
String name;
String version;
}

refer this


Jackson appears to support some amount of JSON parsing straight from an InputStream. My understanding is that it runs on Android and is fairly quick. On the other hand, it is an extra JAR to include with your app, increasing download and on-flash size.


Instead of doing

Reader in = new BufferedReader(
    new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
StringBuilder builder= new StringBuilder();
char[] buf = new char[1000];
int l = 0;
while (l >= 0) {
    builder.append(buf, 0, l);
    l = in.read(buf);
}
JSONTokener tokener = new JSONTokener( builder.toString() );

You can do:

JSONTokener tokener = new JSONTokener(
                           IOUtils.toString(response.getEntity().getContent()) );

where IOUtils is from the commons IO library.


For Android, and using Apache's Commons IO Library for IOUtils:

// connection is a HttpURLConnection
InputStream inputStream = connection.getInputStream()
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOUtils.copy(inputStream, baos);
JSONObject jsonObject = new JSONObject(baos.toString()); // JSONObject is part of Android library

There is no need to do the reader loop yourself. The JsonTokener has this built in. E.g.

ttpResponse response; // some response object
BufferedReader reader = new BufferedReader(new    
JSONTokener tokener = new JSONTokener(reader);
JSONArray finalResult = new JSONArray(tokener);

참고URL : https://stackoverflow.com/questions/2845599/how-do-i-parse-json-from-a-java-httpresponse

반응형