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

时间:2013-07-17 04:06:42

标签: java json gwt

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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();