2013-07-17 3 views
3

결과 JSON 문자열 : ['foo', 'bar', 'baz']. 어떻게하면 String[] 또는 JsArrayString으로 변환 할 수 있습니까? 내가 사용할 수있는 사전 정의 된 데이터 구조가 불가능하다면? 나는 간단한 문자열 배열을 위해 중복되기 때문에 내 자신의 클래스를 만들고 싶지 않다. 당신의 문자열이 유효한 자바 스크립트 배열 표현이기 때문에GWT. JSON 문자열을 String []으로 변환

답변

3

, 당신은 자바 스크립트 배열을 얻을 수 unsafeEval를 사용할 수 있습니다 물론

JsArrayString a = JsonUtils.unsafeEval("['foo', 'bar', 'baz']"); 

당신이 unsafeEval에 임의의 문자열을 전달하면 보안 문제를 알고 있어야합니다.

그렇지 않으면 문자열이 유효한 JSON 표현한다면 당신은 더 안전하는 대신 safeEval을 사용할 수 있습니다 당신은 자바 코드에서 쉽게 JsArrayString 처리 할 수 ​​

JsArrayString j = JsonUtils.safeEval("[\"foo\", \"bar\", \"baz\"]"); 

,하지만 당신은 java.lang.String[]를 선호하는 경우이 필요 이와 같은 몇 가지 추가 코드를 작성하십시오 (jscollections 라이브러리에서 가져옴). 프로덕션 모드에서 변환은 성능 저하를 추가하지 않습니다.

public static String[] toArray(JsArrayString values) { 
    if (GWT.isScript()) { 
    return reinterpretCast(values); 
    } else { 
    int length = values.length(); 
    String[] ret = new String[length]; 
    for (int i = 0, l = length; i < l; i++) { 
     ret[i] = values.get(i); 
    } 
    return ret; 
    } 
} 

private static native String[] reinterpretCast(JsArrayString value) /*-{ 
    return value; 
}-*/; 

마지막으로 당신은뿐만 아니라 java.util.List<String>를 사용할 수 있지만 몇 가지 성능 문제가있을 수 있습니다.

List<String> l = Arrays.asList(s) 
+0

GWT에는 JSON을 처리하기위한 메소드와 클래스가 내장되어 있으므로 JS를 가져올 이유가 없습니다. – Marconius

+2

넵 나는 그것을 알고 있으며 나는 그 시간 전에 그것을 사용했다. GWT-JSON 객체는 내부적으로 jsni를 사용하여 문자열을 파싱하고 오버레이 클래스 대신 많은 Java 클래스를 생성합니다. 실제로 요즘 GWT의 경향은 구형 GWT-JSON보다 훨씬 나은 자동 실행을 사용하여 json을 java-beans에 매핑하는 것입니다. 어쨌든 사용자가 문자열을 JsArrayString 또는 String으로 변환하는 것에 대해 묻는 것이고 그것은 내 응답입니다. –

0

GWT 실제로 com.google.gwt.json.clint 패키지에 JSON 작업을위한 클래스를 내장하고있다. 당신이 당신의 gwt.xml 파일에

<inherits name="com.google.gwt.json.JSON" />

를 추가해야합니다.

JSONArray array = JSONParser.parseLenient("['foo', 'bar', 'baz']").isArray(); 
String[] resultArray = String[array.size()]; 
for(int i = 0; i < array.size(); i++) 
    resultArray[i] = array.get(i).isString().stringValue(); 
관련 문제