Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
784 views
in Technique[技术] by (71.8m points)

Android JSon error "Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2"

I am getting JSon data from a web service, the sample data is given below:

[
  {
    "SectionId": 1,
    "SectionName": "Android"
  }
]

When i try to convert it, it throws an error, i am doing it as:

Data data = new Gson().fromJson(jsonDataFromWebService, Data.class);

My Section Class is:

class Section
{
    public int SectionId;
    public String SectionName;
}

class Data {
    public List<Section> sections;
}

The LogCat says:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You're trying to create an non-Array(Collection) object from a JSONArray. The error is pretty clear: GSON was expecting the beginning of an object but found the beginning of an array instead.

Take a look at the documentation page below to see how to work with Array and Collection types with GSON

https://sites.google.com/site/gson/gson-user-guide#TOC-Collections-Examples

From the docs:

Array Examples

Gson gson = new Gson(); int[] ints = {1, 2, 3, 4, 5}; String[] strings = {"abc", "def", "ghi"};

(Serialization) gson.toJson(ints); ==> prints [1,2,3,4,5] gson.toJson(strings); ==> prints ["abc", "def", "ghi"]

(Deserialization) int[] ints2 = gson.fromJson("[1,2,3,4,5]", int[].class); ==> ints2 will be same as ints

We also support multi-dimensional arrays, with arbitrarily complex element types Collections Examples

Gson gson = new Gson(); Collection ints = Lists.immutableList(1,2,3,4,5);

(Serialization) String json = gson.toJson(ints); ==> json is [1,2,3,4,5]

(Deserialization) Type collectionType = new TypeToken>(){}.getType(); Collection ints2 = gson.fromJson(json, collectionType); ints2 is same as ints

Fairly hideous: note how we define the type of collection Unfortunately, no way to get around this in Java

Collections Limitations

Can serialize collection of arbitrary objects but can not deserialize from it Because there is no way for the user to indicate the type of the resulting object While deserializing, Collection must be of a specific generic type All of this makes sense, and is rarely a problem w> hen following good Java coding practices


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...