2014-08-29 4 views
0

GWT에서 JSON 문자열을 객체 배열에 반입하려고합니다.Json String to Array

내 JSON 문자열은 여기에 있습니다 : https://api.guildwars2.com/v1/wvw/matches.json

{"wvw_matches":[{"wvw_match_id":"2-6","red_world_id":2102,"blue_world_id":2105,"green_world_id":2205,"start_time":"2014-08-22T18:00:00Z","end_time":"2014-08-29T18:00:00Z"}, 
{"wvw_match_id":"1-2","red_world_id":1005,"blue_world_id":1009,"green_world_id":1016,"start_time":"2014-08-23T01:00:00Z","end_time":"2014-08-30T01:00:00Z"}, 
{"wvw_match_id":"1-6","red_world_id":1022,"blue_world_id":1012,"green_world_id":1018,"start_time":"2014-08-23T01:00:00Z","end_time":"2014-08-30T01:00:00Z"}, 
{"wvw_match_id":"2-4","red_world_id":2101,"blue_world_id":2014,"green_world_id":2204,"start_time":"2014-08-22T18:00:00Z","end_time":"2014-08-29T18:00:00Z"}, 
{"wvw_match_id":"2-9","red_world_id":2011,"blue_world_id":2008,"green_world_id":2006,"start_time":"2014-08-22T18:00:00Z","end_time":"2014-08-29T18:00:00Z"}, 
{"wvw_match_id":"1-5","red_world_id":1007,"blue_world_id":1002,"green_world_id":1004,"start_time":"2014-08-23T01:00:00Z","end_time":"2014-08-30T01:00:00Z"}, 
{"wvw_match_id":"2-3","red_world_id":2103,"blue_world_id":2012,"green_world_id":2003,"start_time":"2014-08-22T18:00:00Z","end_time":"2014-08-29T18:00:00Z"}, 
{"wvw_match_id":"2-1","red_world_id":2202,"blue_world_id":2002,"green_world_id":2010,"start_time":"2014-08-22T18:00:00Z","end_time":"2014-08-29T18:00:00Z"}, 
{"wvw_match_id":"1-1","red_world_id":1019,"blue_world_id":1017,"green_world_id":1008,"start_time":"2014-08-23T01:00:00Z","end_time":"2014-08-30T01:00:00Z"}, 
{"wvw_match_id":"2-5","red_world_id":2104,"blue_world_id":2301,"green_world_id":2013,"start_time":"2014-08-22T18:00:00Z","end_time":"2014-08-29T18:00:00Z"}, 
{"wvw_match_id":"2-8","red_world_id":2004,"blue_world_id":2001,"green_world_id":2009,"start_time":"2014-08-22T18:00:00Z","end_time":"2014-08-29T18:00:00Z"}, 
{"wvw_match_id":"2-7","red_world_id":2005,"blue_world_id":2207,"green_world_id":2206,"start_time":"2014-08-22T18:00:00Z","end_time":"2014-08-29T18:00:00Z"}, 
{"wvw_match_id":"1-3","red_world_id":1021,"blue_world_id":1003,"green_world_id":1014,"start_time":"2014-08-23T01:00:00Z","end_time":"2014-08-30T01:00:00Z"}, 
{"wvw_match_id":"2-2","red_world_id":2007,"blue_world_id":2203,"green_world_id":2201,"start_time":"2014-08-22T18:00:00Z","end_time":"2014-08-29T18:00:00Z"}, 
{"wvw_match_id":"1-4","red_world_id":1015,"blue_world_id":1023,"green_world_id":1011,"start_time":"2014-08-23T01:00:00Z","end_time":"2014-08-30T01:00:00Z"}, 
{"wvw_match_id":"1-7","red_world_id":1006,"blue_world_id":1001,"green_world_id":1010,"start_time":"2014-08-23T01:00:00Z","end_time":"2014-08-30T01:00:00Z"}, 
{"wvw_match_id":"1-8","red_world_id":1024,"blue_world_id":1020,"green_world_id":1013,"start_time":"2014-08-23T01:00:00Z","end_time":"2014-08-30T01:00:00Z"}]} 

내 코드 :

try { 
     Request request = builder.sendRequest(null, new RequestCallback() { 


     @Override 
     public void onResponseReceived(Request request, Response response) 
     { 
      if (200 == response.getStatusCode()) { 
       Window.alert(response.getText()); 
        updateTable(JsonUtils.<JsArray<JSONreceiverGW>>safeEval(response.getText())); 
      }else{ 
       Window.alert("Couldn't retrieve JSON " + response.getStatusText()); 

      } 

     } 

     @Override 
     public void onError(Request request, Throwable exception) 
     { 
      Window.alert("Couldn't retrieve JSON"); 

     } 
     }); 
    } catch (RequestException e) { 
     Window.alert("Couldn't retrieve JSON"); 
    } 

    private void updateTable(JsArray<JSONreceiverGW> jsArray) { 

     for (int i = 0; i < jsArray.length(); i++) { 
      Window.alert(jsArray.get(i).getmatchID()); 
     } 


} 

다음과 같은 에러가 발생합니다

Something other than an int was returned from JSNI method '@com.google.gwt.core.client.JsArray::length()': JS value of type undefined, expected int

답변

2

당신이받을 것은 배열이 아닌가, 그것이이다 값이 배열 인 속성을 가진 객체 (해당 객체에는 length 속성이 없습니다.) y이므로 undefined). 당신은 컨테이너 개체에 대한 JSO 필요합니다

public class JSONreceiverGWContainer extends JavaScriptObject { 
    protected JSONreceiverGWContainer() {} 

    public final JsArray<JSONreceiverGW> getWvwMatches() /*-{ return this.wvw_matches; }-*/; 
} 

는 다음 (읽기 쉽도록 두 줄에 분할) 다음과 같은 일을 할 수 있습니다 :

JSONreceiverGWContainer container = JsonUtils.safeEval(response.getText()); 
updateTable(container.getWvwMatches()); 
+0

당신에게 너무 감사합니다! – user3387996