GWT. 将JSON字符串转换为String[]

3
我有一个结果JSON字符串:['foo','bar','baz']。我该如何将其转换为String[]JsArrayString?如果不可能,我可以使用哪种预定义的数据结构?我不想创建自己的类,因为对于简单的字符串数组来说这是多余的。
2个回答

2

由于您的字符串是有效的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)

GWT 中有内置的方法和类来处理 JSON,没有理由将 JS 引入其中。 - Marconius
2
是的,我知道它,而且以前用过。GWT-JSON对象在内部使用jsni解析字符串并生成许多Java类,而不是执行性能更好的Overlay类。实际上,现在在GWT中的趋势是使用autobeans将json映射到java-beans,性能比旧式的GWT-JSON要好得多。无论如何,用户正在询问如何将字符串转换为JsArrayString或String,这就是我的回答。 - Manolo Carrasco Moñino

0
GWT实际上有内置类来处理JSON,位于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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接