gson解析包含不同型別陣列
阿新 • • 發佈:2021-01-08
以下方法只是提供參考
- 當一個list中包含不同型別時,可使用以下方法解析
[
{"name":"法外狂徒張三","age":33},
"123",
123,
12.3
]
- 直接上程式碼
public class MainActivity extends AppCompatActivity {
private static final String TAG = "json";
/*[
{"name":"法外狂徒張三","age":33},
"123",
123,
12.3
]*/
private static final String strJsonData = "[\n" +
"\t{\"name\":\"法外狂徒張三\",\"age\":33},\n" +
"\t\"123\",\n" +
"\t123,\n" +
"\t12.3\n" +
"]" ;
static class InfoBean {
public String name;
public int age;
@Override
public String toString() {
return "InfoBean{" +
"name='" + name + '\'' +
", age=" + age +
'}' ;
}
}
private List<Class> typeList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
typeList.add(InfoBean.class);
typeList.add(String.class);
typeList.add(Integer.class);
typeList.add(Float.class);
JsonArray jsonElements = JsonParser.parseString(strJsonData).getAsJsonArray();//獲取JsonArray物件
for (int i = 0; i < jsonElements.size(); i++) {
JsonElement jsonElement = jsonElements.get(i);
for (int j = 0; j < typeList.size(); j++) {
try {
Object bean = new Gson().fromJson(jsonElement, typeList.get(i));
if (bean instanceof InfoBean) {
Log.i(TAG, "InfoBean.class->" + bean.toString());
} else if (bean instanceof Integer) {
Log.i(TAG, "Integer.class->" + bean);
} else if (bean instanceof String) {
Log.i(TAG, "String.class->" + bean);
} else if (bean instanceof Float) {
Log.i(TAG, "Float.class->" + bean);
}
break;
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
- 執行結果: