我有一个结果JSON字符串:
['foo','bar','baz']
。我该如何将其转换为String[]
或JsArrayString
?如果不可能,我可以使用哪种预定义的数据结构?我不想创建自己的类,因为对于简单的字符串数组来说这是多余的。由于您的字符串是有效的JavaScript数组表示形式,因此可以使用unsafeEval
来获取JavaScript数组:
JsArrayString a = JsonUtils.unsafeEval("['foo', 'bar', 'baz']");
当然,如果您将任意字符串传递给unsafeEval
,则必须注意安全问题。
否则,如果您的字符串是有效的JSON表示,则可以使用更安全的safeEval
:
JsArrayString j = JsonUtils.safeEval("[\"foo\", \"bar\", \"baz\"]");
您可以在Java代码中轻松处理JsArrayString
,但如果您更喜欢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)
com.google.gwt.json.clint
包中。请注意,您需要在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();