- JSON格式的数据有两种解析方式,一种是使用JSONObject,这种解析方式在 IO处理这篇博客中已经详细的讲解过了,如果有疑问可以去这篇博客中学习。
- 这里我们只讲解第二种方式GSON方式
GSON
使用GSON需要导入第三方的包
解析的数据如下所示
[
{"name":"rose","age":"25"},
{"name":"jack","age":"20"},
{"name":"hello","age":"3"},
{"name":"world","age":"2"}
]
- 首先,我们根据json数据的格式,创建一个对应的Bean类
public class People {
private String name;
private String age;
public People(String name, String age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
- 总体的逻辑代码如下:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button button_gson,button_json;
private String data;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
data="[{\"name\":\"rose\",\"age\":\"25\"},{\"name\":\"jack\",\"age\":\"20\"},{\"name\":\"hello\",\"age\":\"3\"},{\"name\":\"world\",\"age\":\"2\"}]";
}
private void init() {
button_gson= (Button) findViewById(R.id.button_gson);
button_json= (Button) findViewById(R.id.button_json);
button_gson.setOnClickListener(this);
button_json.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button_gson:
Gson gson=new Gson();
List<People> peoples=gson.fromJson(data,new TypeToken<List<People>>(){}.getType());
for (People people:peoples){
Log.d("***",people.getName()+people.getAge());
}
break;
case R.id.button_json:
try {
JSONArray jsonArray=new JSONArray(data);
for (int i=0;i<jsonArray.length();i++){
JSONObject obj= jsonArray.getJSONObject(i);
Log.d("***",obj.getString("name")+obj.get("age"));
}
} catch (JSONException e) {
e.printStackTrace();
}
break;
}
}
}
- 重点代码分析
Gson gson=new Gson();
List<People> peoples=gson.fromJson(data,new TypeToken<List<People>>(){}.getType());
for (People people:peoples){
Log.d("***",people.getName()+people.getAge());
}
- 首先我们获取了一个Gson的实例对象,
- 由于我们要解析的是一个JSON数组,所以我们需要借助TypeToken将期望解析成的数据类型传入到fromJson()方法中,
- 然后用一个对应的List存放解析后的数据
- 在遍历这个List就可以了
[
{"name":"rose","age":"25"}
]
- 如果我们要解析的不是一个JSON数据,仅仅是一个JSON数据,那么就简单很多了
Gson gson=new Gson();
People people=gson.fromJson(data,People.class);
- 就可以将数据解析出来了。