【发布时间】:2020-04-30 23:17:33
【问题描述】:
我需要根据函数的返回类型将 json 字符串转换为特定类型。 json 字符串也可以是纯字符串。我在使用 gson.fromJson 方法转换字符串时遇到问题。
如果字符串包含空格,为什么在 gson.fromJson 中会抛出异常?我该如何解决这个问题?
import java.lang.reflect.Method;
import com.google.gson.Gson;
class Trial {
Object retu() {
return "BEVERLY OUTLAW";
}
}
public class sample {
public static void main (String args[]) {
Gson gson = new Gson();
Trial obj = new Trial();
Method func = obj.getClass().getDeclaredMethods()[0];
Object o = gson.fromJson("beverlyoutlaw", func.getGenericReturnType());
System.out.println(o); ---> this prints beverlyoutlaw
o = gson.fromJson("beverly outlaw", func.getGenericReturnType()); ---> This throws an exception!
System.out.println(o);
}
}
【问题讨论】:
-
答案很简单:单个字符串是否是有效的 Json 是有问题的,因为两个不同的 RFC 指定 Json 对此有所不同(更多:stackoverflow.com/questions/13318420/…)。 Gson 不认为字符串是有效的 Json,需要最外层的元素是对象或数组。
-
那为什么它可以在没有空格的字符串上工作呢?
-
我不得不承认,我错过了那部分。你试过
gson.fromJson("\"beverly outlaw\"", ...)吗?我很确定 Json 中的字符串需要用引号括起来,即使没有空格,所以即使在没有它们的情况下解析字符串也已经是“尽最大努力”了。 -
是的,行得通!
-
您在这里有点想打破常规:传递给
fromJson的非JSON 字符串,通过getGenericReturnType检索的目标类型。你想达到什么目的?