2013-07-17 124 views
3

我有結果JSON字符串:['foo', 'bar', 'baz']。我如何將它轉換爲String[]JsArrayString?如果它不可能使用什麼預定義的數據結構?我不想創建自己的類,因爲它對於簡單的字符串數組是多餘的。GWT。將JSON字符串轉換爲字符串[]

回答

3

由於您的字符串是一個有效的JavaScript數組表示,你可以使用unsafeEval得到一個JavaScript數組:

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

當然你如果傳遞一個任意字符串unsafeEval要注意的安全問題。

否則,如果你的字符串是一個有效的JSON表示你可以使用safeEval反而是更安全:

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

可以應對JsArrayString容易在Java代碼中,但如果你喜歡一個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類而不是Overlay類,這些類執行得更好。事實上,現在GWT的趨勢是使用比老式GWT-JSON更好的autobeans將json映射到java-beans。無論如何,用戶正在詢問如何將字符串轉換爲JsArrayString或String,而這正是我的迴應。 –

0

GWT居然還內置類在com.google.gwt.json.clint包JSON工作。請注意,您需要

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

添加到您的gwt.xml文件。

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();