GSON JsonElement.getAsString与JsonElement.toString?

时间:2015-12-06 18:14:17

标签: gson

JsonElement#getAsString()JsonElement#toString()之间的区别是什么?

是否存在应该使用另一个的情况?

1 个答案:

答案 0 :(得分:32)

假设您指的是JsonElement

getAsString()

  

将此元素作为字符串值的便捷方法。

此方法访问并返回元素的属性,即元素的值为java String对象。

toString()

  

返回此元素的String表示形式。

这种方法是"标准" java toString方法,即返回元素本身的可读表示。

为了更好地理解,让我举个例子:

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;

public class GsonTest {

    public static void main(String[] args) {
        JsonElement jsonElement = new JsonPrimitive("foo");

        System.out.println(jsonElement.toString());
        System.out.println(jsonElement.getAsString());

        jsonElement = new JsonPrimitive(42);

        System.out.println(jsonElement.toString());
        System.out.println(jsonElement.getAsString());

        jsonElement = new JsonPrimitive(true);

        System.out.println(jsonElement.toString());
        System.out.println(jsonElement.getAsString());

        jsonElement = new JsonObject();
        ((JsonObject) jsonElement).addProperty("foo", "bar");
        ((JsonObject) jsonElement).addProperty("foo2", 42);

        System.out.println(jsonElement.toString());
        System.out.println(jsonElement.getAsString());
    }
}

输出:

"foo"
foo
42
42
true
true
{"foo":"bar","foo2":42}
Exception in thread "main" java.lang.UnsupportedOperationException: JsonObject
    at com.google.gson.JsonElement.getAsString(JsonElement.java:185)

正如您所看到的,输出在某些情况下非常相似(甚至等于),但在某些其他情况下则不同。 getAsString()仅针对基本类型(以及仅包含单个基本元素的数组)定义,并且如果被调用则抛出异常,例如在一个对象上。 toString()适用于所有类型的JsonElement

现在什么时候应该使用哪种方法?

  • 如果要打印调试信息,请使用toString()
  • 如果您知道自己正在处理基本类型,并且想要在某处显示或写入值,请使用getAsString()
  • 如果您不知道该类型或者您想使用值(即进行计算),请不要使用。而是检查元素的类型并使用适当的方法。