Запуск игры! приложение на Scala. Я делаю запрос, где ожидается, что ответ будет строкой JSON. При проверке отладчика JsonElement возвращает OK со всей ожидаемой информацией. Однако проблема в том, что я пытаюсь запустить методы на этом JsonElement.
val json = WS.url("http://maps.googleapis.com/maps/api/geocode/json?callback=?&sensor=true&address=%s", startAddress+","+startCity+","+startProvince).get.getJson
val geocoder = json.getAsString
Единственная ошибка, которую я получаю, это Исключение неподдерживаемой операции: null
, и я пробовал это на getAsString
и getAsJsonObject
и getAsJsonPrimitive
Есть идеи, почему он не работает по всем методам? Спасибо.
Класс JsonElement
бросит Unsupported Operation Exception
для любого getAs<Type>
метод, потому что это - абстрактный класс и имеет смысл, что он реализован таким образом.
По некоторым причинам класс JsonObject
, не реализует эти getAs<Type>
методы, таким образом, любой вызов к одному из этих методов выдаст исключение.
Вызов toString
метод на JsonElement
объект, может решить Вашу проблему при определенных обстоятельствах, но не, вероятно, что Вы хотите, потому что это возвращает json представление как Строку (например, \"value\"
) в некоторых случаях.
я узнал, что также JsonPrimitive
класс существует, и он действительно реализует эти getAs<Type>
методы. Таким образом, вероятно, корректный способ продолжиться является чем-то вроде этого:
String input = "{\"key1\":\"value1\",\"key2\":\"value2\"}";
JsonParser parser = new JsonParser();
JsonElement jsonTree = parser.parse(input);
if(jsonTree != null && jsonTree.isJsonObject()) {
JsonObject jsonObject = jsonTree.getAsJsonObject();
value = jsonObject.get("key1").getAsJsonPrimitive().getAsString()
}
пз. Я удалил всю nullability часть менеджмента. Если Вы кодируете в Java, Вы, вероятно, хотите управлять этим лучшим способом.
посмотрите исходный код GitHub для [1 111]: https://github.com/google/gson/blob/master/gson/src/main/java/com/google/gson/JsonElement.java#L178