GSON JsonElement.getAsString против JsonElement.toString?

В чем разница между JsonElement#getAsString() и JsonElement#toString()?

Есть ли ситуации, когда нужно использовать другую?

Ответ 1

Предполагая, что вы имеете в виду JsonElement:

getAsString()

чтобы получить этот элемент как строковое значение.

Этот метод обращается и возвращает свойство элемента, то есть значение элемента как объекта java String.

toString()

Возвращает строковое представление этого элемента.

Этот метод является стандартным методом 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()
  • Если вы не знаете тип или хотите работать со значением (т.е. делать вычисления), не используйте ни того, ни другого. Вместо этого проверьте тип элемента и используйте соответствующий метод.