解析JSON入门
JSON 是现在比较流行的轻量级数据交换语言。要解析json首先要对它的结构有一定的了解。
JSON 的基本数据格式可以分为
1.JSON 对象——JSONObject
{“name”:”张三” , “age”:20 , “male”:true}
2.JSON数组——JSONArray
[{“name”:”张三” , “age”:20 , “male”:true},{“name”:”小丽” , “age”:25 , “male”:false}]
可以用简单的方法来判断,即{}内的是一个JSONObject,而[]内的是一个JSONArray,在复杂的JSON串也是由这些基本元素构成的,只要一步步解析就可以了。
解析方法1:手动解析
{“name”:”张三” , “age”:20 , “male”:true}解析代码:
Java代码
public void parseJsonObject(String json) {
try {
JSONObject jsonObject = new JSONObject(json);
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
boolean male = jsonObject.getBoolean("male");
//处理数据
} catch (JSONException e) {
e.printStackTrace();
}
}
[{“name”:”张三” , “age”:20 , “male”:true},{“name”:”小丽” , “age”:25 , “male”:false}]解析代码:
Java代码
public void parseJSONArray(String json) {
try {
JSONArray jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArray.length(); i++) {
jsonObject = jsonArray.getJSONObject(i);
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
boolean male = jsonObject.getBoolean("male");
//处理数据
}
} catch (JSONException e) {
e.printStackTrace();
}
}
复杂的json只要按部就班的解析就可以了。比如一个形如{ [ { } , { } ,{ a} ] }的JSON串只要按照JSONObject,JSONArray,JSONObject的顺序就可以得到a。
解析方法2:使用JSON库来解析
解析JSON库有很多,这里只介绍一个由Google提供的Gson。它可以在JSON字符串和Java对象间转换。
Gson包可以在 http://search.maven.org/#artifactdetails%7Ccom.google.code.gson%7Cgson%7C2.7%7C 下载。或者自行搜索。
JSON转换为Java对象可以用
gson.fromJson(String json, Class class);
或者
Gson.fromJson(String json, Type typeOfT)
[{“name”:”张三” , “age”:20 , “male”:true},{“name”:”小丽” , “age”:25 , “male”:false}]解析:
方法一:使用type
/**
* 解析模型
* @author chenlf
*
*/
public class User {
private String name;
private int age;
private boolean male;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isMale() {
return male;
}
public void setMale(boolean male) {
this.male = male;
}
}
String jsonString = "[{\"name\":\"张三\" , \"age\":20 , \"male\":true},{\"name\":\"小丽\" , \"age\":25 , \"male\":false}]";
Gson gson = new Gson();
Type type = new TypeToken<List<User>>() {
}.getType();
List<User> list = new ArrayList<User>();
list = gson.fromJson(jsonString, type);
```
方法二使用class
在这里要注意如果是这样[{"name":"张三" , "age":20 , "male":true},{"name":"小丽" , "age":25 , "male":false}]的json串是无法直接解析的,因为你无法给你的class与json形成对应关系。变形成{"people":[{"name":"张三" , "age":20 , "male":true},{"name":"小丽" , "age":25 , "male":false}] }即可使用
```java
/**
* 类匹配方式
* @author chenlf
*
*/
public class UserArray {
private List<User> people;
public List<User> getPeople() {
return people;
}
public void setPeople(List<User> people) {
this.people = people;
}
}
<div class="se-preview-section-delimiter"></div>
Gson gson = new Gson();
UserArray userArray = gson.fromJson(jsonString, UserArray.class);
<div class="se-preview-section-delimiter"></div>
Class或Type是我们根据json串来编写的。如json里有一个“name”:”张三”,我们就要在类里加一个string name;的参数。如果实在任性就是不要和json一样,那就使用@SerializedName 参数。
@SerializedName("name")
public String renxing;