涉及列表时的GSON NumberFormatException

时间:2017-02-07 13:11:32

标签: java json gson

我试图将API请求中的JSON解析为POJO对象。

我收到的JSON数据:

{
    "friends": {
        "user": [
            {
                "name": "Tomstyan",
                "image": [
                    {
                        "#text": "https://lastfm-img2.akamaized.net/i/u/34s/24514aeefa73fab11c176cbf38a331ae.png",
                        "size": "small"
                    },
                    {
                        "#text": "https://lastfm-img2.akamaized.net/i/u/64s/24514aeefa73fab11c176cbf38a331ae.png",
                        "size": "medium"
                    },
                    {
                        "#text": "https://lastfm-img2.akamaized.net/i/u/174s/24514aeefa73fab11c176cbf38a331ae.png",
                        "size": "large"
                    },
                    {
                        "#text": "https://lastfm-img2.akamaized.net/i/u/300x300/24514aeefa73fab11c176cbf38a331ae.png",
                        "size": "extralarge"
                    }
                ],
                "url": "https://www.last.fm/user/Tomstyan",
                "country": "",
                "age": "0",
                "gender": "n",
                "subscriber": "FIXME",
                "playcount": "714",
                "playlists": "0",
                "bootstrap": "0",
                "registered": {
                    "unixtime": "1456094418"
                },
                "type": "FIXME",
                "scrobblesource": "FIXME"
            },
            {
                "name": "Bigham96",
                "image": [
                    {
                        "#text": "https://lastfm-img2.akamaized.net/i/u/34s/2ca8614f31e70fcabe0678a8a622d48c.png",
                        "size": "small"
                    },
                    {
                        "#text": "https://lastfm-img2.akamaized.net/i/u/64s/2ca8614f31e70fcabe0678a8a622d48c.png",
                        "size": "medium"
                    },
                    {
                        "#text": "https://lastfm-img2.akamaized.net/i/u/174s/2ca8614f31e70fcabe0678a8a622d48c.png",
                        "size": "large"
                    },
                    {
                        "#text": "https://lastfm-img2.akamaized.net/i/u/300x300/2ca8614f31e70fcabe0678a8a622d48c.png",
                        "size": "extralarge"
                    }
                ],
                "url": "https://www.last.fm/user/Bigham96",
                "country": "",
                "age": "0",
                "gender": "n",
                "subscriber": "FIXME",
                "playcount": "16988",
                "playlists": "0",
                "bootstrap": "0",
                "registered": {
                    "unixtime": "1445348751"
                },
                "type": "FIXME",
                "scrobblesource": "FIXME"
            },
            {
                "name": "UKJonnyMfc",
                "realname": "Jonny Dring",
                "image": [
                    {
                        "#text": "https://lastfm-img2.akamaized.net/i/u/34s/f600685470064369c306879e464cb470.png",
                        "size": "small"
                    },
                    {
                        "#text": "https://lastfm-img2.akamaized.net/i/u/64s/f600685470064369c306879e464cb470.png",
                        "size": "medium"
                    },
                    {
                        "#text": "https://lastfm-img2.akamaized.net/i/u/174s/f600685470064369c306879e464cb470.png",
                        "size": "large"
                    },
                    {
                        "#text": "https://lastfm-img2.akamaized.net/i/u/300x300/f600685470064369c306879e464cb470.png",
                        "size": "extralarge"
                    }
                ],
                "url": "https://www.last.fm/user/UKJonnyMfc",
                "country": "",
                "age": "0",
                "gender": "n",
                "subscriber": "FIXME",
                "playcount": "29056",
                "playlists": "0",
                "bootstrap": "0",
                "registered": {
                    "#text": "2014-02-11 22:38:27",
                    "unixtime": "1392158307"
                },
                "type": "FIXME",
                "scrobblesource": "FIXME"
            }
        ],
        "@attr": {
            "for": "tomgreen32",
            "page": "1",
            "perPage": "50",
            "totalPages": "1",
            "total": "3"
        }
    }
}

我必须把它们放入的对象如下:

import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Friends {

@SerializedName("user")
@Expose
private List<User> user = null;
@SerializedName("@attr")
@Expose
private Attr attr;

public List<User> getUser() {
    return user;
}

public void setUser(List<User> user) {
    this.user = user;
}

public Attr getAttr() {
    return attr;
}

public void setAttr(Attr attr) {
    this.attr = attr;
}


}

的Attr

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;


public class Attr {

@SerializedName("for")
@Expose
private String _for;
@SerializedName("page")
@Expose
private String page;
@SerializedName("perPage")
@Expose
private String perPage;
@SerializedName("totalPages")
@Expose
private String totalPages;
@SerializedName("total")
@Expose
private String total;

public String getFor() {
    return _for;
}

public void setFor(String _for) {
    this._for = _for;
}

public String getPage() {
    return page;
}

public void setPage(String page) {
    this.page = page;
}

public String getPerPage() {
    return perPage;
}

public void setPerPage(String perPage) {
    this.perPage = perPage;
}

public String getTotalPages() {
    return totalPages;
}

public void setTotalPages(String totalPages) {
    this.totalPages = totalPages;
}

public String getTotal() {
    return total;
}

public void setTotal(String total) {
    this.total = total;
}

}

图片

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Image {

@SerializedName("#text")
@Expose
private String text;
@SerializedName("size")
@Expose
private String size;

public String getText() {
    return text;
}

public void setText(String text) {
    this.text = text;
}

public String getSize() {
    return size;
}

public void setSize(String size) {
    this.size = size;
}

}

注册

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Registered {

@SerializedName("#text")
@Expose
private String text;
@SerializedName("unixtime")
@Expose
private String unixtime;

public String getText() {
    return text;
}

public void setText(String text) {
    this.text = text;
}

public String getUnixtime() {
    return unixtime;
}

public void setUnixtime(String unixtime) {
    this.unixtime = unixtime;
}

}

主要

在我的主类中,我有以下代码来解析JSON。

final URL reqURL = new URL("http://ws.audioscrobbler.com/2.0/?method=user.getfriends&" +
            "user=" + username + 
            "&api_key=" + API_KEY + 
            "&format=json");

    final InputStream inputstream = APISend(reqURL);

    BufferedReader reader = new BufferedReader(new InputStreamReader(inputstream));


    GetFriends getfriends = gson.fromJson(reader, GetFriends.class);

    System.out.println(getfriends.getFriends().getUser().get(0).getName());

从我读过的内容来看,用户列表可能会导致问题,我已经读过有关TypeToken但我无法弄清楚如何实现它。这是我第一次尝试用gson做任何事情,所以任何帮助都会被定价。感谢。

更新

完整错误

Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: For input string: "2014-02-11 22:38:27"
at com.google.gson.internal.bind.TypeAdapters$11.read(TypeAdapters.java:249)
at com.google.gson.internal.bind.TypeAdapters$11.read(TypeAdapters.java:239)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:116)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:216)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:116)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:216)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:116)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:216)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:116)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:216)
at com.google.gson.Gson.fromJson(Gson.java:879)
at com.google.gson.Gson.fromJson(Gson.java:817)
at Main.getUserFriends(Main.java:66)
at Main.main(Main.java:89)
Caused by: java.lang.NumberFormatException: For input string: "2014-02-11 22:38:27"
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
at com.google.gson.stream.JsonReader.nextInt(JsonReader.java:1198)
at com.google.gson.internal.bind.TypeAdapters$11.read(TypeAdapters.java:247)
... 16 more

更新2

当我使用http://www.jsonschema2pojo.org/生成pojo时,

创建了GetFriends方法

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class GetFriends {

@SerializedName("friends")
@Expose
private Friends friends;

public Friends getFriends() {
return friends;
}

public void setFriends(Friends friends) {
this.friends = friends;
}

}

0 个答案:

没有答案