2013-10-23 2 views
3

일부 필드에 Gson을 사용하고 있습니다. 그런데 모든 JSON 응답에서 하나의 값만 필요하기 때문에 클래스를 만들고 싶지 않습니다. 내가 wantedValue 필요하지만, 직렬화 복원에 전체 클래스를 생성하지 않으JSON의 일부 필드 만 deserialize하는 방법은 무엇입니까?

{ 
    "result": { 
     "name1": "value1", 
     "name2": "value2", 
    }, 
    "wantedName": "wantedValue" 
} 

: 여기에 내 대답이다. Gson을 사용하여이를 달성 할 수 있습니까?

+0

당신은 아마 "wantedName"값을 찾기 위해 JSON 자신을 구문 분석 할 수 있습니다. – Cruncher

+0

@Cruncher 정규식에 대해 생각하고 있었지만 가능한 경우 사용하지 않는 것이 좋습니다. – Angelo

+0

당신은'ExclusionStrategy'를 만들 수 있습니다, 여기를보세요 : http://stackoverflow.com/questions/4802887/gson-how-to-exclude-specific-fields-from-serialization-without-annotations – Amar

답변

4

필드가 하나만 필요한 경우 JSONObject을 사용하십시오.

import org.json.JSONException; 
import org.json.JSONObject; 


public class Main { 
public static void main(String[] args) throws JSONException { 

    String str = "{" + 
      " \"result\": {" + 
      "  \"name1\": \"value1\"," + 
      "  \"name2\": \"value2\"," + 
      " }," + 
      " \"wantedName\": \"wantedValue\"" + 
      "}"; 

    JSONObject jsonObject = new JSONObject(str); 

    System.out.println(jsonObject.getString("wantedName")); 
} 

출력 :

wantedValue 
+1

위 예가 –

+0

게시 됨 ! BTW, Gson을 사용하는 것이 가능한지 알고 있습니까? – Angelo

0

그냥 JSON을 구문 분석하는 데 사용 GSON의 일부만을 사용할 수 :

Reader reader = /* create reader from source */ 
Streams.parse(new JsonReader(reader)).getAsJsonObject().get("wantedValue").getAsString(); 
1

당신이 GSON을 사용하지 않는 경우, I https://github.com/douglascrockford/JSON-java을 사용합니다. 단일 필드를 쉽게 추출 할 수 있습니다. Gson을 사용하여이 간단한 작업을 수행 할 수있는 방법을 찾지 못했습니다.

당신은 할 것

String wantedName = new JSONObject(jsonString).getString("wantedName"); 
관련 문제