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 |