JSON 格式文件非常常见,解析Json的第三方jar 也非常多,常见的就是谷歌与阿里的,今天就是利用谷歌的Gjson完成一个数组的解析
1.准备maven文件配置
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>
2.准备一个测试的JSon文件
[
{"name": "tom",
"personid":"k001",
"address": "不知道",
"tel": "10086",
"mail": "4432432@qq.com",
"fax": "43242322"
},
{"name": "ton",
"personid":"f003",
"address": "张三",
"tel": "42143214",
"mail": "fsdf@qq.com",
"fax": "1000000"
}
]
3.根据Json文件创建一个类
class Person{
private String personid;
private String name;
private String address;
private String tel;
private String fax;
private String mail;
public Person() {
}
public Person(String personid, String name, String address, String tel, String fax, String mail) {
this.personid = personid;
this.name = name;
this.address = address;
this.tel = tel;
this.fax = fax;
this.mail = mail;
}
@Override
public String toString() {
return "peopel{" +
"personid='" + personid + '\'' +
", name='" + name + '\'' +
", address='" + address + '\'' +
", tel='" + tel + '\'' +
", fax='" + fax + '\'' +
", mail='" + mail + '\'' +
'}';
}
public String getPersonid() {
return personid;
}
public void setPersonid(String personid) {
this.personid = personid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getFax() {
return fax;
}
public void setFax(String fax) {
this.fax = fax;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
}
4.具体实现
public class Mtest {
public static void main(String[] args) throws IOException {
InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("userlist.json");//加载
InputStreamReader in=new InputStreamReader(resourceAsStream);//转换为reader
JsonReader reader= new JsonReader(in);//装载
List<Person> ls= new ArrayList<>();//准备一个集合
reader.beginArray(); //开始读取一个集合
while (reader.hasNext()){
ls.add(parseperson(reader));//通过自定义方法实现内部对象
}
reader.endArray();//结束
//验证
ls.forEach((sss)->{
System.out.println(sss.toString());
});
}
//
private static Person parseperson(JsonReader js) throws IOException {
Person ps=new Person();//准备一个对象
js.beginObject();//开始读取对象
//遍历对象
while (js.hasNext()){
String tag=js.nextName();//获取对象名
if("name".equals(tag)){
ps.setName(js.nextString());
};
if("personid".equals(tag)){
ps.setPersonid(js.nextString());
};
if("address".equals(tag)){
ps.setAddress(js.nextString());
};
if("tel".equals(tag)){
ps.setTel(js.nextString());
};
if("fax".equals(tag)){
ps.setFax(js.nextString());
};
if("mail".equals(tag)){
ps.setMail(js.nextString());
};
}
js.endObject();//结束读取对象
return ps;
}
}
结果展示
peopel{personid=‘k001’, name=‘tom’, address=‘不知道’, tel=‘10086’, fax=‘43242322’, mail=‘4432432@qq.com’}
peopel{personid=‘f003’, name=‘ton’, address=‘张三’, tel=‘42143214’, fax=‘1000000’, mail=‘fsdf@qq.com’}
总结:在解析时要先看清楚要解析的结构,【】是数组,{}是对象。实现应用中嵌套使用的较多。