Приложение
My Android (API 24, java 8) анализирует json файлы в java объектах, используя Gson 2.8.6.
A JSON тестовый объект (фактические более сложный, включая массив):
{
"firstname" : "John",
"lastname" : "Smith",
"age" : 23
}
и тестовый класс java:
public class Person {
public String firstname;
public String lastname;
public int age;
public Person(String f,String l,int a) {
firstname = f;
lastname = l;
age = a;
}
}
... который я использую для анализа файлов json в Person
объекты:
Gson gson = new Gson();
Person p = gson.fromJson(somePersonText, Person.class);
Согласно Javado c, возникающим при выполнении задач Гсона, должно возникать исключение:
JsonSyntaxException - если json не является допустимым представлением для объект типа classOfT
Но если я дам ему, например, "age" : "23"
, Gson не выдает исключение, вместо этого он тихо преобразует "23"
в int
.
Если есть опечатка, например, "firstnam" : "John"
, firstname
заканчивается как null
(потому что, конечно, он не может сопоставить «firstnam» с «firstname»), но все равно нет исключения, что позже вызывает проблемы при работе с Person
.
Здесь есть ответ об этом здесь :
JSON, который вы даете GSON, равен 100 % полностью действителен. В нем нет синтаксических ошибок. Вот почему вы не получаете JsonSyntaxException.
Хотя он вернет объект User [Person
в моем случае] со значениями по умолчанию, поскольку он не может сопоставить ни одно из полей из ввода JSON в поля объекта User.
Этот ответ не касается, как с этим справиться.
Вот почему мой вопрос :
Как мне заставить Gson дать мне какой-то тип обратной связи после разбора? Есть ли способ запросить у Gson «отчет» (и если это просто логическое «ошибка»), так что я могу быть уверен, что он не конвертировал молча между типами или даже не отображался?