2012-12-13 6 views
2

를 사용하여 자바 객체로.... 나는 SOLR 인스턴스에서 돌아 오는 다소 JSON 응답이 잭슨

{"responseHeader": 
    {"status":0,"QTime":1,"params":{"sort":"score asc","fl":"*,score", 
    "q":"{! score=distance}","wt":"json","fq":"description:motor","rows":"1"}}, 
     "response":{"numFound":9,"start":0,"maxScore":6.8823843,"docs": 
        [{"workspaceId":2823,"state":"MN","address1":"1313 mockingbird Lane", 
        "address2":"","url":"http://mydomain.com/","city":"Minneapolis", 
        "country":"US","id":"399068","guid":"","geo":["45.540239, -98.580473"], 
        "last_modified":"2012-12-12T20:40:29Z","description":"ELEC MOTOR", 
        "postal_code":"55555","longitude":"-98.580473","latitude":"45.540239", 
        "identifier":"1021","_version_":1421216710751420417,"score":0.9288697}]}} 

를 JSON을 역 직렬화하는 그리고 자바 객체에 그지도하기 위해 노력하고있어 방법 :

public class Item extends BaseModel implements Serializable { 
    private static final long serialVersionUID = 1L; 

    protected Integer workspaceId; 
    protected String name; 
    protected String description; 
    protected String identifier; 
    protected String identifierSort; 
    protected Address address; 
    protected String url; 

     /** getters and setters eliminated for brevity **/ 
} 

public class Address implements Serializable { 
    private static final long serialVersionUID = 1L; 

    protected String address1; 
    protected String address2; 
    protected String city; 
    protected String state; 
    protected String postalCode; 
    protected String country; 
      /** getters and setters eliminated for brevity **/ 
    } 

어떻게 address1, address2, city, state 등을 Item 객체의 Address 객체에 매핑합니까? 나는 Jackson annotations에 대해 읽었는데, 어디서부터 시작해야할지에 관해서는 아무 것도 정말로 나와 있지 않습니다.

+0

시도한 것을 지정해야합니다. 다른 방법이 있습니다 http://mattgemmell.com/2008/12/08/what-have-you-tried/ –

+0

SolrJ 사용을 고려 했습니까? 응답을 푸는 것과 쿼리를 구성하는 것이 더 편리 할 수 ​​있습니다. –

+0

@ 에릭 (Eric) 나는 그걸 들여다 볼 의사가 완전히 가지고 있지 않았다. 시작할 URL이 있다고 생각하십니까? – kasdega

답변

2

우리는 Solrj를 사용하여 결국 : 여기

는 (주로 잭슨의 문서에서 해제)를 사용하는 예입니다. 다음

List<SolrResult> solrResults = rsp.getBeans(SolrResult.class); 

그리고 SolrResult.java에서 우리는 우리가 먼저 필드를 얻을 수 SolrJ 주석 사용 복잡하거나 중첩 된 객체를했고 :

우리는 우리가 지금처럼 SolrJ에 공급 우리 자신의 SolrResult 객체를 썼다 필요에 따라 값을 설정하십시오.

@Field("address1") 
public void setAddress1(String address1) { 
    this.item.getAddress().setAddress1(address1); 
} 

다소 지저분하다고 느끼지는 않지만 작동합니다.

2

Jackson 1.9 이상을 사용하는 경우 @JsonUnwrapped 주석을 사용하여 처리 할 수 ​​있습니다. - 종류의

public class Name { 
    private String first, last; 

    // Constructor, setters, getters 
} 

public class Parent { 
    private int age; 
    @JsonUnwrapped 
    private Name name; 

    // Constructor, setters, getters 
} 

public static void main(String[] args) { 
    try { 
     final ObjectMapper mapper = new ObjectMapper(); 
     final Parent parent = mapper.readValue(new File(
      "/path/to/json.txt"), Parent.class); 
     System.out.println(parent); 
    } catch (final Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

나는 그것에게 탄 감사를 줄 것이다! – kasdega