Я пытаюсь разобрать строку JSON, как эта
[
{
"updated_at":"2012-03-02 21:06:01",
"fetched_at":"2012-03-02 21:28:37.728840",
"description":null,
"language":null,
"title":"JOHN",
"url":"http://rus.JOHN.JOHN/rss.php",
"icon_url":null,
"logo_url":null,
"id":"4f4791da203d0c2d76000035",
"modified":"2012-03-02 23:28:58.840076"
},
{
"updated_at":"2012-03-02 14:07:44",
"fetched_at":"2012-03-02 21:28:37.033108",
"description":null,
"language":null,
"title":"PETER",
"url":"http://PETER.PETER.lv/rss.php",
"icon_url":null,
"logo_url":null,
"id":"4f476f61203d0c2d89000253",
"modified":"2012-03-02 23:28:57.928001"
}
]
в список объектов.
List<ChannelSearchEnum> lcs = (List<ChannelSearchEnum>) new Gson().fromJson( jstring , ChannelSearchEnum.class);
Вот класс объекта, который я использую.
import com.google.gson.annotations.SerializedName;
public class ChannelSearchEnum {
@SerializedName("updated_at")
private String updated_at;
@SerializedName("fetched_at")
private String fetched_at;
@SerializedName("description")
private String description;
@SerializedName("language")
private String language;
@SerializedName("title")
private String title;
@SerializedName("url")
private String url;
@SerializedName("icon_url")
private String icon_url;
@SerializedName("logo_url")
private String logo_url;
@SerializedName("id")
private String id;
@SerializedName("modified")
private String modified;
public final String get_Updated_at() {
return this.updated_at;
}
public final String get_Fetched_at() {
return this.fetched_at;
}
public final String get_Description() {
return this.description;
}
public final String get_Language() {
return this.language;
}
public final String get_Title() {
return this.title;
}
public final String get_Url() {
return this.url;
}
public final String get_Icon_url() {
return this.icon_url;
}
public final String get_Logo_url() {
return this.logo_url;
}
public final String get_Id() {
return this.id;
}
public final String get_Modified() {
return this.modified;
}
}
Но это бросает меня с
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2
Есть идеи как мне это исправить?
jstring
выглядит ваш код, на который вы ссылались в своем коде?Ответы:
Проблема в том, что вы говорите,
Gson
что у вас есть объект вашего типа. Вы не У вас есть массив объектов вашего типа. Вы не можете просто попытаться получить такой результат и ожидать, что он волшебным образом сработает;)Руководство пользователя
Gson
объясняет, как с этим справиться:https://github.com/google/gson/blob/master/UserGuide.md
Это будет работать:
Но это лучше
источник
TypoToken<Collection<Something>>
- не используйте массивы, когда вы можете иметь Collection (подклассы) и / или Iterables.Проблема в том, что вы запрашиваете объект типа,
ChannelSearchEnum
но на самом деле у вас есть объект типаList<ChannelSearchEnum>
.Вы можете достичь этого с помощью:
источник
Type
? что импортировать?java.lang.reflect.Type
В моем случае строка JSON:
и я печатаю "category" и "url_title" в recycleview
Datum.class
RequestInterface
DataAdapter
и наконец MainActivity.java
источник
Альтернатива может быть
чтобы ваш ответ выглядел как
myCustom_JSONResponse
вместо того
server_JSONResponse
КОД
После этого это будет просто любой другой
GSON Parsing
источник
в соответствии с руководством пользователя GSON , вы не можете.
источник
Gson
удовольствием справитьсяЭто похоже на список массивов Json. Поэтому его лучше всего использовать
ArrayList
для обработки данных. В вашей конечной точке API добавить список массивов, как этоисточник
Вы должны сообщить Gson дополнительный тип вашего ответа, как показано ниже
источник
Я не уверен, что это лучший способ использовать GSON, но у меня работает. Вы можете использовать такие как на
MainActivity
:У вас есть только строки, но если у вас есть double или int, вы можете поставить
getDouble
илиgetInt
тоже.Метод
IOHelper
класса следующий (здесь путь сохраняется во внутреннем хранилище):Если вам нужна дополнительная информация об этом, вы можете посмотреть это видео , где я получаю код
readJson()
; и этот поток, где я получаю кодgetData()
.источник
Котлин:
источник