2012-08-24 3 views
0

JSON 오버레이 객체를 사용하는 것과는 달리 JSON을 POJO로 파싱하는 데 대한 PR/CONS에 대해 사람들이 생각해 보았습니다.Android 파싱 JSON 대 JSON 오버레이

사용 사례 : Person JSON 문서를 반환하는 REST 호출.

[{ "이름": "NAME1"}, { "이름": "NAME2} ...]

용액 1 : GSON 잭슨을 사용하여 POJO로

파스 들어오는 JSON, 된 JSONObject/JSONArray 등 (수동),

결과 :

class Person { 

    String name; 

    public String getName() { 

     return name; 
    } 
} 

해결 방법 2 :

overla 만들기 y 클래스는 JSONObject 액세스 메소드를 사용합니다.

결과 : 특히

class Person { 

    JSONObject json; 

    public String getName() { 

     json.getString("name"); 
    } 
} 

, 나는 안드로이드에 제한된 시스템 능숙 측면에서 관심이 있어요. 파싱 ​​비용을 선행하여 더 많은 메모리를 사용하거나 ListView와 같은 데이터 액세스 중에 파싱 비용이 발생하기를 원합니까?

중요합니까?

답변

0

나는 보통 해결 방법 1.

  1. 다운로드를 선호 하나의 비동기 작업으로 해석하는 것은 아주 간단합니다. 파싱은 웹에서 다운로드하는 것과 비교할 때 매우 빠릅니다.
  2. JSON 데이터는 구문 분석이 완료되고 그 시점에서 필요한 메모리가 더 낮 으면 메모리에서 제거 할 수 있습니다.
  3. 데이터 액세스가 솔루션 2보다 빠릅니다. 예를 들어 UI 스레드에서이를 사용하려는 경우 빠른 액세스가 필수적입니다. ListView의 항목을 업데이트하십시오.

그러나 솔루션 2가 더 나은 결과를 가져올 수있는 시나리오가 있습니다. 수천명의 사람들이 있거나 데이터를 빠르게 분석하는 것보다 더 빨리 분석 할 수 있습니다. ListView은 현재 볼 수있는 데이터 만 요청하므로 구문 분석은 필요시에만 수행되며 보이지 않는 항목에 대해 존재하는 데이터의 양과 다소 차이가 날 수 있습니다.

하나의 항목을 구문 분석하는 데 시간이 오래 걸린 경우 솔루션 2를 ListView과 함께 사용되는 비동기 이미지 로더와 같은 비동기 방식으로 사용할 수도 있습니다. 이 경우 파싱을 항상 동일한 객체에 대해 반복해야하는 것을 방지하기 때문에 아래와 같이 사용할 것입니다.

class Person { 

    boolean parsed; 
    String name; 
    JSONObject json; 

    public String getName() { 
     if (!parsed) { 
      name = json.getString("name"); 
      json = null; 
      parsed = true; 
     } 
     return name; 
    } 
}