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를 사용하고 있습니다.
보다 효율적으로 수행 할 수있는 두 가지 :
- 더 빠르고 동생이기 때문에
StringBuilder
대신 사용하십시오StringBuffer
. 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
'code' 카테고리의 다른 글
React Native에서 백그라운드 작업을 어떻게 실행할 수 있습니까? (0) | 2020.10.30 |
---|---|
HTML5 Canvas 요소에서 사용자 정의 글꼴을 사용하려면 어떻게해야합니까? (0) | 2020.10.30 |
설치하지 않고 실행할 수있는 Visual Studio 애플리케이션을 배포하는 가장 좋은 방법 (0) | 2020.10.30 |
패키지를로드 할 수 없습니다 : package. : 빌드 가능한 Go 소스 파일이 없습니다. (0) | 2020.10.30 |
C ++ 11 이니셜 라이저 목록이 실패하지만 길이가 2 인 목록에서만 (0) | 2020.10.30 |