作为现在最流行的传输数据格式,json可谓是用的越来越普及了,在实际开发过程中,偶尔也会遇到一些复杂类型的json串解析,下面把我今天遇到的麻烦json解析过程记录下来
1.业务场景,通过接口获取数据需要把数据解析存入数据库
{
"data": [{
"name": "张三",
"sex": "男",
"age": "18",
"good": "11",
"class": "59",
"list": [{
"age": "17",
"name": "李四",
"sex": "女",
"xxx": "哈哈"
}, {
"age": "xxx",
"name": "xxxx",
"sex": "xxxx",
"xxx": "xxxx"
}, {
"age": "xxx",
"name": "xxxx",
"sex": "xxxx",
"xxx": "xxx"
}, {
"age": "xxxx",
"name": "xxxx",
"sex": "xxx",
"xxx": "xxxxx"
}, {
"age": "xxxx",
"name": "xxxx",
"sex": "xxxx",
"xxx": "xxxxx"
}, {
"age": "xxxx",
"name": "xxxx",
"sex": "xxxx",
"xxx": "xxxx"
}, {
"age": "xxx",
"name": "xxx",
"sex": "xxxx",
"xxx": "xxxx"
}, {
"age": "xxxx",
"name": "xxxx",
"sex": 8,
"xxx": "xxx"
}, {
"age": "xxxx",
"name": "xxx",
"sex": "xxx",
"xxx": "xxx"
}, {
"age": "xxx",
"name": "xxx",
"sex": "xxx",
"xxx": "xxx"
}, {
"age": "xxx",
"name": "xxx",
"sex": "xx",
"xxx": "xxx"
}, {
"age": "xxx",
"name": "xxx",
"sex": "xx",
"xxx": "xxx"
}]
}],
"info": {
"errCode": 0,
"errMsg": "suc",
"version": "9.0"
}
}
废话不多说直接上代码
getListMap.java
public class getListMap {
public static void main(String[] args) {
//json字符串
String json = "{\"data\":[{\"name\":\"张三\",\"sex\":\"男\",\"age\":\"18\",\"good\":\"11\",\"class\":\"59\",\"list\":[{\"age\":\"17\",\"name\":\"李四\",\"sex\":\"女\",\"xxx\":\"哈哈\"},{\"age\":\"xxx\",\"name\":\"xxxx\",\"sex\":\"xxxx\",\"xxx\":\"xxxx\"},{\"age\":\"xxx\",\"name\":\"xxxx\",\"sex\":\"xxxx\",\"xxx\":\"xxx\"},{\"age\":\"xxxx\",\"name\":\"xxxx\",\"sex\":\"xxx\",\"xxx\":\"xxxxx\"},{\"age\":\"xxxx\",\"name\":\"xxxx\",\"sex\":\"xxxx\",\"xxx\":\"xxxxx\"},{\"age\":\"xxxx\",\"name\":\"xxxx\",\"sex\":\"xxxx\",\"xxx\":\"xxxx\"},{\"age\":\"xxx\",\"name\":\"xxx\",\"sex\":\"xxxx\",\"xxx\":\"xxxx\"},{\"age\":\"xxxx\",\"name\":\"xxxx\",\"sex\":8,\"xxx\":\"xxx\"},{\"age\":\"xxxx\",\"name\":\"xxx\",\"sex\":\"xxx\",\"xxx\":\"xxx\"},{\"age\":\"xxx\",\"name\":\"xxx\",\"sex\":\"xxx\",\"xxx\":\"xxx\"},{\"age\":\"xxx\",\"name\":\"xxx\",\"sex\":\"xx\",\"xxx\":\"xxx\"},{\"age\":\"xxx\",\"name\":\"xxx\",\"sex\":\"xx\",\"xxx\":\"xxx\"}]}],\"info\":{\"errCode\":0,\"errMsg\":\"suc\",\"version\":\"9.0\"}}";
//将json字符串转化为map结构
Map jsonToMap = JSONArray.parseObject(json,Map.class);
System.out.println("jsonToMap"+jsonToMap);
//JsonArray转化为list(这个转化了很久,最后找到这个方式转化)
List<Map> jsonToList = JSONArray.parseArray(jsonToMap.get("data").toString(),Map.class);
System.out.println(jsonToList+"jsonToList");
for (Map map : jsonToList) {
System.out.println(map);
//同上面一样,只是把list里面设置为我们的实体类而已,为了更方便获取数据
List<beans> list = JSONObject.parseArray(map.get("list").toString(), beans.class);
for (int i= 0;i<list.size();i++){
System.out.println("name为:"+list.get(i).getName()+"\t"+"age为:"+list.get(i).getAge()+"\t"+"xxx为:"+list.get(i).getXxx()+"\t"+"sex为:"+list.get(i).getSex());
}
}
}
}
为了简便起见,有部分属性就封装为一个javabean beans.java
public class beans implements Serializable {
private String age;
private String name;
private String sex;
private String xxx;
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "beans{" +
"age='" + age + '\'' +
", name='" + name + '\'' +
", sex=" + sex +
", xxx='" + xxx + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getXxx() {
return xxx;
}
public void setXxx(String xxx) {
this.xxx = xxx;
}
public beans(String age, String name, String sex, String xxx) {
this.age = age;
this.name = name;
this.sex = sex;
this.xxx = xxx;
}
public beans() {
}
}
到这就解析获取成功了