我想将List数据转换为下面的json结构,因为我已经将数据从mysql中提取到arraylist中,并且还编写了pojo类EducationDTO。
{
"id": "1",
"name": "EDUCATION",
"data": "",
"children": [
{
"id": "1.1",
"name": "STREAM-ENGG",
"data": "",
"children": [
{
"id": "1.11",
"name": "COMPUTER SCIENCE",
"data": "",
"children": [
{
"id": "1.111",
"name": "YEAR-01",
"data": ""
},
{
"id": "1.112",
"name": "YEAR-02",
"data": ""
},
{
"id": "1.113",
"name": "YEAR-03",
"data": ""
},
{
"id": "1.114",
"name": "YEAR-04",
"data": ""
}
]
},
{
"id": "1.12",
"name": "EXTC",
"data": "",
"children": [
{
"id": "1.121",
"name": "YEAR-01",
"data": ""
},
{
"id": "1.122",
"name": "YEAR-02",
"data": ""
},
{
"id": "1.123",
"name": "YEAR-03",
"data": ""
},
{
"id": "1.124",
"name": "YEAR-04",
"data": ""
}
]
},
{
"id": "1.13",
"name": "BIOMEDICAL",
"data": "",
"children": [
{
"id": "1.131",
"name": "YEAR-01",
"data": ""
},
{
"id": "1.132",
"name": "YEAR-02",
"data": ""
},
{
"id": "1.133",
"name": "YEAR-03",
"data": ""
},
{
"id": "1.134",
"name": "YEAR-04",
"data": ""
}
]
},
{
"id": "1.14",
"name": "CHEMICAL",
"data": "",
"children": [
{
"id": "1.141",
"name": "YEAR-01",
"data": ""
},
{
"id": "1.142",
"name": "YEAR-02",
"data": ""
},
{
"id": "1.143",
"name": "YEAR-03",
"data": ""
},
{
"id": "1.144",
"name": "YEAR-04",
"data": ""
}
]
}
]
},
{
"id": "1.2",
"name": "STREAM-MEDICAL",
"data": "",
"children": [
{
"id": "1.21",
"name": "MBBS",
"data": "",
"children": [
{
"id": "1.211",
"name": "YEAR-01",
"data": ""
},
{
"id": "1.212",
"name": "YEAR-02",
"data": ""
},
{
"id": "1.212",
"name": "YEAR-03",
"data": ""
},
{
"id": "1.213",
"name": "YEAR-04",
"data": ""
},
{
"id": "1.214",
"name": "YEAR-05",
"data": ""
}
]
},
{
"id": "1.22",
"name": "BHMS",
"data": "",
"children": [
{
"id": "1.221",
"name": "YEAR-01",
"data": ""
},
{
"id": "1.222",
"name": "YEAR-02",
"data": ""
},
{
"id": "1.223",
"name": "YEAR-03",
"data": ""
}
]
},
{
"id": "1.31",
"name": "BDS",
"data": "",
"children": [
{
"id": "1.311",
"name": "YEAR-01",
"data": ""
},
{
"id": "1.312",
"name": "YEAR-02",
"data": ""
},
{
"id": "1.313",
"name": "YEAR-03",
"data": ""
},
{
"id": "1.314",
"name": "YEAR-04",
"data": ""
}
]
}
]
}
]
}
我很难理解我写过的逻辑,它会包含重复的代码。
JsonFactory jFactory=new JsonFactory();
Writer writer = new StringWriter();
JsonGenerator jsGenerator = jFactory.createJsonGenerator(writer);
jsGenerator.writeStartObject();
jsGenerator.writeEndObject();
for(EducationDTO eDto:vDto.getEducationDTOList()){
if(eDto.getParent_Id().equalsIgnoreCase("0")){
jsGenerator.writeStringField("id",eDto.getUnid());
jsGenerator.writeStringField("name",eDto.getNode_Name());
jsGenerator.writeStringField("data","");
if(eDto.getHasChildren().equalsIgnoreCase("YES")){
jsGenerator.writeFieldName("children");
jsGenerator.writeStartArray();
for(EducationDTO eDto2:vDto.getEducationDTOList()){
if(eDto2.getParent_Id().equalsIgnoreCase(eDto.getUnid())){
jsGenerator.writeStartObject();
jsGenerator.writeStringField("id",eDto.getUnid());
jsGenerator.writeStringField("name",eDto2.getNode_Name());
jsGenerator.writeStringField("data","");
if(eDto2.getHasChildren().equalsIgnoreCase("YES")){
jsGenerator.writeFieldName("children");
jsGenerator.writeStartArray();
for(EducationDTO eDto3:vDto.getEducationDTOList()){
if(eDto3.getParent_Id().equalsIgnoreCase(eDto2.getUnid())){
jsGenerator.writeStartObject();
jsGenerator.writeStringField("id",eDto.getUnid());
jsGenerator.writeStringField("name",eDto3.getNode_Name());
jsGenerator.writeStringField("data","");
if(eDto2.getHasChildren().equalsIgnoreCase("YES")){
jsGenerator.writeFieldName("children");
jsGenerator.writeStartArray();
for(EducationDTO eDto4:vDto.getEducationDTOList()){
if(eDto4.getParent_Id().equalsIgnoreCase(eDto3.getUnid())){
jsGenerator.writeStartObject();
jsGenerator.writeStringField("id",eDto4.getUnid());
jsGenerator.writeStringField("name",eDto4.getNode_Name());
jsGenerator.writeStringField("data","");
jsGenerator.writeEndObject();
}
}
jsGenerator.writeEndArray();
}
jsGenerator.writeEndObject();
}
}
jsGenerator.writeEndArray();
}
jsGenerator.writeEndObject();
}
}
jsGenerator.writeEndArray();
}
break;
}
}
jsGenerator.close();
答案 0 :(得分:0)
以下是将Java Object转换为json的方法
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("c:\\EducationDTO.json"), EducationDTO);
ArrayList也是一个Java对象,即使java Object有迭代对象,它也会将它转换为JSON。
假设你有像
这样的递归对象A类{A a; // setter and getters}
在模型类中使用JsonIdentityInfo来打破循环循环。
或与
一起使用使用Jackson-Jsog plugin并使用以下注释注释每个类。 @JsonIdentityInfo(发电机= JSOGGenerator.class)
答案 1 :(得分:0)
请使用以下代码:
import java.lang.reflect.Field;
import java.util.List;
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class JsonConvertor {
private static GsonBuilder gsonBuilder;
private static Gson gson;
private JsonConvertor() {
}
public static Object fromJson(String json, Class clz)
{
gson=new Gson();
return gson.fromJson(json,clz);
}
public static String toJson(Object obj) {
gsonBuilder = new GsonBuilder();
gsonBuilder = gsonBuilder
.addSerializationExclusionStrategy(new CustomIclusionStrategy(
obj.getClass()));
gson = gsonBuilder.create();
String json = gson.toJson(obj);
return json;
}
}
class CustomIclusionStrategy implements ExclusionStrategy {
private Class classToIclude;
private Field[] declaredFields;
private List<FieldAttributes> fields;
public CustomIclusionStrategy(List<FieldAttributes> fields) {
this.fields = fields;
}
public CustomIclusionStrategy(Class classToIclude) {
this.classToIclude = classToIclude;
this.declaredFields=classToIclude.getDeclaredFields();
}
// called only if shouldSkipClass returns false
@Override
public boolean shouldSkipField(FieldAttributes f) {
try {
classToIclude.getSuperclass().getDeclaredField(f.getName());
System.out.println(f.getName());
return true;
} catch (Exception e) {
}
return false;
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
// if returns false shouldSkipField will be called, otherwise
//shouldSkipField will not be called
return false;
}
}
并从此处致电:
import java.util.ArrayList;
import java.util.List;
public class Node {
String id;
String name;
String data;
List<Node> children;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public List<Node> getChildren() {
return children;
}
public void setChildren(List<Node> children) {
this.children = children;
}
public String toJson()
{
return JsonConvertor.toJson(this);
}
public Node(String id, String name, String data) {
super();
this.id = id;
this.name = name;
this.data = data;
}
public Node(String id, String name, String data, List<Node> children) {
super();
this.id = id;
this.name = name;
this.data = data;
this.children = children;
}
public static void main(String[] args) {
Node n5=new Node("1","YEAR-01","");
List<Node> list3=new ArrayList<Node>();
list3.add(n5);
Node n3=new Node("1","COMPUTER SCIENCE","",list3);
Node n4=new Node("1","EXTC","",list3);
List<Node> list=new ArrayList<Node>();
List<Node> list2=new ArrayList<Node>();
list2.add(n3);
list2.add(n4);
Node n2=new Node("1","STREAM-ENGG","",list2);
list.add(n2);
Node n1=new Node("1","EDUCATION","",list);
System.out.println(n1.toJson());
}
}
这是你生成的json
{
"id": "1",
"name": "EDUCATION",
"data": "",
"children": [{
"id": "1",
"name": "STREAM-ENGG",
"data": "",
"children": [{
"id": "1",
"name": "COMPUTER SCIENCE",
"data": "",
"children": [{
"id": "1",
"name": "YEAR-01",
"data": ""
}]
},
{
"id": "1",
"name": "EXTC",
"data": "",
"children": [{
"id": "1",
"name": "YEAR-01",
"data": ""
}]
}]
}]
}