在使用GSON解析一段JSON数组时,需要借助TypeToken将期望解析成的数据类型传入到fromJson()方法中,如下:
List<Person> people = gson.fromJson(jsonData, new TypeToken<List<Person>>(){}.getType());
首先,new TypeToken<List<Person>>(){}
是一个匿名内部类,其等价MyTypeToken<List<Person>> extends TypeToken(){}
,但是{}里是空的,
1 : Gson 将 jsonList转换成 List 通过下面的 函数转换
gson.fromJson(result.toString(), new TypeToken<List<LevelTypeInfo>>(){}.getType())
String JsonList =
[
{
"codeType": "S",
"description": "武汉"
},
{
"codeType": "C",
"description": "北京"
},
{
"codeType": "B",
"description": "长沙"
},
{
"codeType": "W",
"description": "深圳"
}
]
public List<LevelTypeInfo> getLevelTypeList(String assetName) {
try {
InputStream open = BaseApplication.getContext().getAssets().open(assetName);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(open));
StringBuilder result = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
result.append(line);
}
bufferedReader.close();
Gson gson = new Gson();
return gson.fromJson(result.toString(), new TypeToken<List<LevelTypeInfo>>(){}.getType());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public class LevelTypeInfo implements Serializable {
private String codeType;
private String description;
public String getCodeType() {
return codeType;
}
public void setCodeType(String codeType) {
this.codeType = codeType;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return "LevelTypeInfo{" +
"codeType='" + codeType + '\'' +
", StringType='" + description + '\'' +
'}';
}
}
2 : 通过Gson 将 json 转换成 对象 直接转换成 Student对象
return gson.fromJson(result.toString(), Student.class);
{
"studentList": [
{
"code": "01",
"name": "张三",
"description": "武汉"
},
{
"code": "02",
"name": "李四",
"description": "北京"
}
]
}
public Student getLevelList() {
try {
InputStream open = BaseApplication.getContext().getAssets().open("level.json");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(open));
StringBuilder result = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
result.append(line);
}
bufferedReader.close();
Gson gson = new Gson();
return gson.fromJson(result.toString(), Student.class);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public class Student {
private List<StudentInfo> studentList;
public class StudentInfo {
private String code;
private String name;
private String description;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
}