详解Java解析Json的几种方式
现如今系统开发越来越偏向于前后端分离,和前后端数据传输的方式主要方式是通过Json来传输,在这里我为大家介绍几种Java解析Json的方式。
首先创建Name实体类,并添加set,get,tostring方法。
public class Name {
private String firstName;
private String lastName;
public Name() {
}
public Name(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
@Override
public String toString() {
return "Name{" +
"firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
'}';
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
并创建两个与之对应的Json(name.json、names.json)
name.json
{ "firstName":"Bill" , "lastName":"Gates" }
names.json
[
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName":"Carter" }
]
1. 通过JsonReader解析
@Test
public void parseJSONNames() {
InputStream is = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("com/vince/json/names.json");
InputStreamReader in = new InputStreamReader(is);
JsonReader reader = new JsonReader(in);
ArrayList<Name> list = new ArrayList<>();
try {
reader.beginArray();
while (reader.hasNext()) {
list.add(parseName(reader));
}
reader.endArray();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(Arrays.toString(list.toArray()));
}
private Name parseName(JsonReader jsonReader) {
Name name=null;
try {
jsonReader.beginObject();
name=new com.vince.json.Name();
while (jsonReader.hasNext()){
String attr = jsonReader.nextName();
if ("firstName".equals(attr)){
name.setFirstName(jsonReader.nextString());
}else if ("lastName".equals(attr)){
name.setLastName(jsonReader.nextString());
}
}
jsonReader.endObject();
} catch (IOException e) {
e.printStackTrace();
};
return name;
}
解析结果如图:
2. 通过gson解析
/*
把一组JSON对象转换成Java集合,或把一个Java集合转换成一组Json对象;
*/
@Test
public void gson2(){
Gson gson = new Gson();
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("com/vince/json/names.json");
InputStreamReader in = new InputStreamReader(is);
TypeToken<List<Name>> typeToken = new TypeToken<List<Name>>(){};
List<Name> list = gson.fromJson(in, typeToken.getType());
String json = gson.toJson(list, typeToken.getType());
System.out.println(json);
}
/*
把一个JSON对象转换成Java对象,或把一个Java对象转换成Json对象;
*/
@Test
public void gson1(){
Gson gson = new Gson();
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("com/vince/json/name.json");
InputStreamReader in = new InputStreamReader(is);
Name name = gson.fromJson(in, Name.class);
String j = gson.toJson(name);
System.out.println(j);
}
解析结果如图:
代码是很早写的,有很多命名不规范的地方,还请谅解。