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

前端 未结 3 766
一向
一向 2020-12-01 22:26

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

[
  {
    \"SectionId\": 1,
    \"SectionName\": \"Android\"
  }
]
相关标签:
3条回答
  • 2020-12-01 23:01

    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

    0 讨论(0)
  • 2020-12-01 23:01

    Use Section class only as follows:

    Section[] sectionArray = new Gson().fromJson(jsonDataFromWebService, Section[].class);
    for (Section section: sectionArray) {
         Log.e("Debug", section.toString());
    }
    
    0 讨论(0)
  • 2020-12-01 23:03

    The error explains whats wrong... u r returning an array and not a JSon object

    try as following:

    JSONArray ja = new JSONArray(jsonStringReturnedByService);
    
    Data sections = new Data();
    
    for (int i = 0; i < ja.length(); i++) {
        Section s = new Section();
        JSONObject jsonSection = ja.getJSONObject(i);
    
        s.SectionId = Integer.ValueOf(jsonSection.getString("SectionId"));
        s.SectionName = jsonSection.getString("SectionName");
    
       //add it to sections list
       sections.add(s);
    }
    
    return sections;
    
    0 讨论(0)
提交回复
热议问题