Saya mencoba mengurai string JSON seperti ini
[
{
"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"
}
]
ke dalam daftar objek.
List<ChannelSearchEnum> lcs = (List<ChannelSearchEnum>) new Gson().fromJson( jstring , ChannelSearchEnum.class);
Ini kelas objek yang saya gunakan.
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;
}
}
Tapi itu membuatku senang
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2
Ada ide bagaimana saya harus memperbaikinya?
jstring
penampilan Anda di kode Anda?Jawaban:
Masalahnya adalah Anda mengatakan
Gson
Anda memiliki objek tipe Anda. Kamu tidak. Anda memiliki berbagai objek tipe Anda. Anda tidak bisa hanya mencoba dan memberikan hasil seperti itu dan berharap itu bekerja secara ajaib;)Panduan pengguna untuk
Gson
Menjelaskan cara menangani ini:https://github.com/google/gson/blob/master/UserGuide.md
Ini akan berhasil:
Tapi ini lebih baik:
sumber
TypoToken<Collection<Something>>
- jangan gunakan array ketika Anda dapat memiliki Collection (subclasses) dan / atau Iterables.Masalahnya adalah Anda meminta objek bertipe
ChannelSearchEnum
tetapi yang sebenarnya Anda miliki adalah objek bertipeList<ChannelSearchEnum>
.Anda dapat mencapai ini dengan:
sumber
Type
itu? apa yang harus diimpor?java.lang.reflect.Type
Dalam string JSON kasus saya:
dan saya mencetak "kategori" dan "url_title" di recycleview
Datum.class
Minta Permukaan
DataAdapter
dan akhirnya MainActivity.java
sumber
Alternatifnya bisa
untuk membuat respons Anda terlihat seperti
myCustom_JSONResponse
dari pada
server_JSONResponse
KODE
Setelah ini akan menjadi yang lainnya
GSON Parsing
sumber
menurut panduan Pengguna GSON , Anda tidak bisa.
sumber
Gson
dengan senang hati akan berurusan dengannyaIni terlihat seperti daftar array Json. Oleh karena itu yang terbaik digunakan
ArrayList
untuk menangani data. Di titik akhir api Anda, tambahkan daftar array seperti inisumber
Anda perlu memberi tahu Gson jenis respons tambahan seperti di bawah ini
sumber
Saya tidak yakin apakah ini cara terbaik untuk menggunakan GSON, tetapi bekerja untuk saya. Anda dapat menggunakan beberapa seperti ini di
MainActivity
:Anda hanya memiliki string, tetapi jika Anda memiliki dobel atau int, Anda bisa memasukkan
getDouble
ataugetInt
juga.Metode
IOHelper
kelas adalah yang berikutnya (Di sini, path disimpan di Penyimpanan internal):Jika Anda ingin informasi lebih lanjut tentang ini, Anda dapat melihat video ini , tempat saya mendapatkan kode
readJson()
; dan utas ini tempat saya mendapatkan kodegetData()
.sumber
Kotlin:
sumber