[英]parse JSON array/object using Gson in java
我想使用GSON解析JAVA中的JSON文件,文件格式如下:
{
"parcel":[
{
"firstName": "ABC",
"lastName": "LAST",
"email": "abc.LAST@g.com",
"country": "United States",
"dates": [
"2013-05-01",
"2014-05-07"
]
},
{
"firstName": "CVS",
"lastName": "Bad",
"email": "cvs.Bad@g.com",
"country": "Iceland",
"dates": [
"2010-04-30",
"2011-01-01",
]
}
]
}
我在公共課程中的主要方法如下:
public static void main(String[] args) throws IOException {
try(Reader reader = new InputStreamReader(JsonToJava.class.getResourceAsStream("input.json"), "UTF-8")){
Gson gson = new GsonBuilder().create();
Parcel p = gson.fromJson(reader, Parcel.class);
System.out.println(p);
}
}
以下是包裹的代碼:
public class Parcel {
Data data;
@Override
public String toString() {
return "Parcel [data=" + data + "]";
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}
}
class Data{
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public Arrays[] getAvailableDates() {
return dates;
}
public void setAvailableDates(Arrays[] dates) {
this.dates = dates;
}
@Override
public String toString() {
return "Data [firstName=" + firstName + ", lastName=" + lastName + ", email=" + email + ", country=" + country
+ ", dates=" + Arrays.toString(dates) + "]";
}
private String firstName;
private String lastName;
private String email;
private String country;
private Arrays[] dates;
}
但是我似乎並沒有找到將變量的所有值存儲在列表中的正確方法。 現在,我得到的只是Parcel [data = null]。
JSON輸入和您的類層次結構必須兼容。 現在,您有了一個具有一個名為“ data”的Data
屬性的Parcel
類。 同時,您的JSON是具有名為“ class”的屬性的對象。 因此,gson在Parcel類中找不到“ class”屬性,並且“ data”屬性被忽略。
其次,您的JSON具有一個Data數組,而不只是一個Data實例,因此您必須從中創建一個數組。
所以這應該更好地工作:
import com.google.gson.annotations.SerializedName;
public class Parcel {
@SerializedName("class")
Data[] data;
@Override
public String toString() {
StringBuilder result = new StringBuilder();
result.append("Parcel [data=");
for(Data singleData : data) {
if (singleData != data[0]) {
result.append(", ");
}
result.append(singleData.toString());
}
result.append("]");
return result.toString();
}
}
這可能仍然會崩潰,因為您省略了Data
類中使用的“ Arrays”類。 如果您將類型從Arrays
更改為String
它應該可以工作。
我還使用@SerializedName
批注將data
屬性映射到class
屬性,因為class
是Java中的關鍵字。
跳過根元素(“宗地”)的解決方案:
try(Reader reader = new InputStreamReader(new ByteArrayInputStream(jsonString1.getBytes()), "UTF-8")){
Gson gson = new GsonBuilder().create();
JsonElement rootElement = gson.fromJson(reader, JsonObject.class).get("parcel");
Data[] parcels = gson.fromJson(rootElement, Data[].class);
for (Data parcel : parcels) {
System.out.println(parcel);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.