2017-11-28 1 views
1

이 질문에 대한 나의 이전 질문은 실제로 어디에도 없었으며 아마도 옳은 것을 묻지 않았거나 너무 자세했습니다.JSON 클래스를 다른 이름의 Java 클래스로 비 병렬화하십시오.

내 기본 질문은 이제 어떻게 다른 클래스 이름을 가진 Java 객체에 하나의 클래스 이름으로 JSON 객체를 비 직렬화 할 수 있습니까?

예를 들어, 서버가 전송/예상하는 JSON 클래스는 "18"입니다.이 컨트롤은 제로입니다. 내 Java 클래스는 "18"이 될 수 없으므로 "_18"입니다.

단순히 새로운 Gson() .Json()이 다른 명명 정책을 사용하는 경우에도 도움이되지 않았습니다. _18 개체는 항상 null입니다. 나는 이후 타입 어댑터와 다른 주석에 대해 읽었지 만, 이것에 접근하는 방법에 대해서는 여전히 불명확하다. 가장 현명한 것 같은 @SerializedName 메서드는 클래스 자체에 사용할 수 없으며 필드 멤버 만 사용할 수 있습니다.

18이라는 클래스를 사용하여 JSON 객체를 _18이라는 Java 클래스에 직렬화 해제 할 수 있습니까? (가능하다면 클래스를 실제 이름으로 지정할 수 있습니다). 요청에 의해

샘플 JSON, 모든의

"18": { 
    "field1": "value1", 
    "field2": "value2", 
    "field3": "value3" 
} 
+1

당신이 다루고있는 JSON의 샘플을 게시 할 수 :

아래의 샘플 테스트 케이스를 볼 수? –

+0

샘플 JSON이 편집에 추가되었습니다. – sorinev

+0

지도 사용 : "18"이지도의 키입니다. –

답변

2

첫째 - JSON이 클래스의 개념이 없다는 - 그것은 객체의 문자열 표현입니다. 예가 잘못된 JSON 일뿐입니다. 그것은해야합니다 같은 : 나아가서 field1, field2field3 특성을 가진 다른 클래스의 같은 필드 "18"유효 JSON 객체입니다

{"18": 
{ 
    "field1": "value1", 
    "field2": "value2", 
    "field3": "value3" 
    } 
} 

.

서버가 JSON 문자열을 반환하는 경우에는 구문 분석을 위해 {}을 사용하고 Java 클래스의 속성을 "18"로 지정하면 자바 이름을 @SerializedName annotation으로 지정합니다.

public static void main(String... args) throws Exception { 

    String testJson = "{\"18\":{\"name\":\"poomba\",\"value\":\"topchoomba\"}}"; 

    Gson gson = new GsonBuilder().create(); 

    MyClassFor18 test18 = gson.fromJson(testJson, MyClassFor18.class); 

    System.out.println(test18); 

} 

private static class MyClassFor18 { 

    @SerializedName ("18") 
    private TestPojo valueObject; 

    public TestPojo getValueObject() { 
     return valueObject; 
    } 

    public void setValueObject(TestPojo valueObject) { 
     this.valueObject = valueObject; 
    } 

    @Override 
    public String toString() { 

     return "MyClassFor18 (value=" + valueObject + ")"; 
    } 

} 
private static class TestPojo { 

    private String name; 
    private String value; 

    public TestPojo(String name, String value) { 

     this.name = name; 
     this.value = value; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 

    @Override 
    public String toString() { 

     return "TestPojo { name=" + this.name + ", value=" + this.value 
       + "}"; 
    } 
} 
관련 문제