我从Web服务获取JSON数据,样本数据给出如下:
[
{
"SectionId": 1,
"SectionName": "Android"
}
]
当我尝试将其转换,它抛出一个错误,我这样做是:
Data data = new Gson().fromJson(jsonDataFromWebService, Data.class);
我的科类是:
class Section
{
public int SectionId;
public String SectionName;
}
class Data {
public List<Section> sections;
}
该logcat的说:
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_OBJECT但BEGIN_ARRAY位于第1行第2列
错误解释了什么是错...乌尔返回一个数组,而不是一个JSON对象
尝试如下:
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;
你想创建一个从JSONArray的(集合)非数组对象。 该错误是相当清楚的:GSON在等一个对象的开始,但发现一个数组的开头来代替。
看看文档页面下面来看看如何使用数组和集合与GSON工作
https://sites.google.com/site/gson/gson-user-guide#TOC-Collections-Examples
从文档:
阵列的例子
GSON GSON =新GSON(); INT []整数= {1,2,3,4,5}; 串[]字符串= { “ABC”, “DEF”, “GHI”};
(串行化)gson.toJson(整数); ==>打印[1,2,3,4,5] gson.toJson(字符串); ==>打印[ “ABC”, “DEF”, “GHI”]
(反序列化)INT [] INTS2 = gson.fromJson( “[1,2,3,4,5]”,INT []类。); ==> INTS2将相同整数
我们还支持多维数组,具有任意复杂的元件类型类别实例
GSON GSON =新GSON(); 收集整型= Lists.immutableList(1,2,3,4,5);
(串行化)字符串JSON = gson.toJson(整数); ==> JSON是[1,2,3,4,5]
(反序列化)类型collectionType =新TypeToken>(){}的getType(); 收集INTS2 = gson.fromJson(JSON,collectionType); INTS2是相同整数
相当可怕:注意我们如何定义集合可惜的类型,没有办法来解决这个问题在Java中
集合限制
可序列化的任意对象的集合,但不能从它反序列化因为有没有办法用户指示生成的对象的类型,而反序列化,集合必须是特定的泛型类型所有的这是有道理的,而且是很少的一个问题W>母鸡下优秀的Java编码实践
使用科类只如下:
Section[] sectionArray = new Gson().fromJson(jsonDataFromWebService, Section[].class);
for (Section section: sectionArray) {
Log.e("Debug", section.toString());
}
文章来源: Android JSon error “Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2”