复杂JSON串转成对象步骤
工具:
JSON生成实体类网站: 点击此处
一、示例JSON
{
"code":200,
"data":{
"records":[
{
"id":"1360547626449233",
"name":"父字段",
"stock":"2000",
"children":[
{
"id":"1360547626449233",
"name":"子项目",
"stock":"2000"
},{
"id":"123456",
"name":"子项目2",
"stock":2000
}
]
}
],
"place":"河南"
}
}
二、使用步骤
1.使用工具将JSON串转成几个实体类
得到实体类代码如下:
package com.zheng.pojo;
public class JsonRootBean {
private int code;
private Data data;
public void setCode(int code) {
this.code = code;
}
public int getCode() {
return code;
}
public void setData(Data data) {
this.data = data;
}
public Data getData() {
return data;
}
@Override
public String toString() {
return "JsonRootBean{" +
"code=" + code +
", data=" + data +
'}';
}
}
package com.zheng.pojo;
public class Data {
private List<Records> records;
private String place;
public void setRecords(List<Records> records) {
this.records = records;
}
public List<Records> getRecords() {
return records;
}
public void setPlace(String place) {
this.place = place;
}
public String getPlace() {
return place;
}
@Override
public String toString() {
return "Data{" +
"records=" + records +
", place='" + place + '\'' +
'}';
}
}
package com.zheng.pojo;
public class Records {
private String id;
private String name;
private int stock;
private List<Children> children;
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
public void setChildren(List<Children> children) {
this.children = children;
}
public List<Children> getChildren() {
return children;
}
@Override
public String toString() {
return "Records{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", stock=" + stock +
", children=" + children +
'}';
}
}
package com.zheng.pojo;
public class Children {
private String id;
private String name;
private int stock;
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
@Override
public String toString() {
return "Children{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", stock=" + stock +
'}';
}
}
2.利用fastjson转成实体类
代码如下(示例):
package com.zheng.javaPractice;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.comicyu.pojo.JsonRootBean;
public class JsonPractice {
/** https://www.bejson.com/json2javapojo/new/
* JSON串转Object练习
* 问题1.使用JSONObject.toJSONString时,对象属性部分缺失:
* 在使用IDE自动生成set get方法的时候,有些属性的首字母还是小写的,如getvPerson,这种形式toJSONString这个方法不认,导致一部分对象属性没有转化成json串。
*/
private static void jsonTansferObject() {
String JsonStr = "{\n" +
"\"code\":200,\n" +
" \"data\":{\n" +
" \"records\":[\n" +
" {\n" +
" \"id\":\"1360547626449233\", \n" +
" \"name\":\"父字段\", \n" +
" \"stock\":2000,\n" +
" \"children\":[\n" +
" {\n" +
" \"id\":\"1360547626449233\",\n" +
" \"name\":\"子项目\",\n" +
" \"stock\":2000\n" +
" },{\n" +
" \"id\":\"123456\",\n" +
" \"name\":\"子项目2\",\n" +
" \"stock\":2000\n" +
" }\n" +
" \n" +
" ]\n" +
" }\n" +
" ],\n" +
" \"place\":\"河南\"\n" +
" }\n" +
"}";
//转换对象成功,字段名一定全部小写
JsonRootBean bean = JSONObject.parseObject(JsonStr, JsonRootBean.class);
String data = bean.getData().toString();
System.out.println(bean.toString());
}
public static void main(String[] args) {
JsonPractice.jsonTansferObject();
}
}
执行结果:
正确输出