Java 具有树结构的分层JSON

Java 具有树结构的分层JSON,java,json,gson,Java,Json,Gson,我必须用Java创建一个类似于树的JSON结构,其中有一个父节点,其中有多个子节点,以此类推。这是我的代码,我已经部分完成了这一步,但没有完全成功。这是我需要的输出 { "name": "Culture", "children": [ { "name": "Salary" }, { "name": "Work", "children": [

我必须用Java创建一个类似于树的JSON结构,其中有一个父节点,其中有多个子节点,以此类推。这是我的代码,我已经部分完成了这一步,但没有完全成功。这是我需要的输出

{
    "name": "Culture", 
    "children": [
        {
            "name": "Salary"
        }, 
        {
            "name": "Work", 
            "children": [
                {
                    "name": "Effort"
                }, 
                {
                    "name": "trust"
                }
            ]
        }
    ]
}
但我产生的是

{"name":"Culture",[{"name":"Salary"},{"name":"Work"},{"name":"Effort"}],"name":"Work",[{"name":"Culture"},{"name":"Work"}]}
这是我的密码:

import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;

public class ParentChildApp {
public static class EntryListContainer {

    public List<Entry> children = new ArrayList<Entry>();
    public Entry name;

}

public static class Entry {

    private String name;

    public Entry(String name) {
        this.name = name;
    }

}

public static void main(String[] args) {

    EntryListContainer elc1 = new EntryListContainer();
    elc1.name = new Entry("Culture");
    elc1.children.add(new Entry("Salary"));
    elc1.children.add(new Entry("Work"));
    elc1.children.add(new Entry("Effort"));

    EntryListContainer elc2 = new EntryListContainer();
    elc2.name = new Entry("Work");
    elc2.children.add(new Entry("Culture"));
    elc2.children.add(new Entry("Work"));

    ArrayList<EntryListContainer> al = new ArrayList<EntryListContainer>();
    Gson g = new Gson();

    al.add(elc1);
    al.add(elc2);

    StringBuilder sb = new StringBuilder("{");
    for (EntryListContainer elc : al) {

        sb.append(g.toJson(elc.name).replace("{", "").replace("}", ""));
        sb.append(",");
        sb.append(g.toJson(elc.children));
        sb.append(",");
    }

    String partialJson = sb.toString();

    if (al.size() > 1) {
        int c = partialJson.lastIndexOf(",");
        partialJson = partialJson.substring(0, c);
    }

    String finalJson = partialJson + "}";
    System.out.println(finalJson);

    }

}
import com.google.gson.gson;
导入java.util.ArrayList;
导入java.util.List;
公共类ParentChildApp{
公共静态类EntryListContainer{
public List children=new ArrayList();
公众入口名称;
}
公共静态类条目{
私有字符串名称;
公共条目(字符串名称){
this.name=名称;
}
}
公共静态void main(字符串[]args){
EntryListContainer elc1=新的EntryListContainer();
elc1.name=新条目(“文化”);
elc1.子女。添加(新条目(“工资”);
elc1.儿童。添加(新条目(“工作”);
elc1.儿童。添加(新条目(“努力”);
EntryListContainer elc2=新的EntryListContainer();
elc2.name=新条目(“工作”);
elc2.儿童。添加(新条目(“文化”);
elc2.儿童。添加(新条目(“工作”);
ArrayList al=新的ArrayList();
Gson g=新的Gson();
加上(elc1);
新增(elc2);
StringBuilder sb=新的StringBuilder(“{”);
对于(EntryListContainer elc:al){
sb.append(g.toJson(elc.name).replace(“{,”).replace(“},”);
某人加上(“,”);
sb.append(g.toJson(elc.children));
某人加上(“,”);
}
字符串partialJson=sb.toString();
如果(al.size()>1){
int c=partialJson.lastIndexOf(“,”);
partialJson=partialJson.substring(0,c);
}
字符串finalJson=partialJson+“}”;
System.out.println(finalJson);
}
}
执行以下操作:

package stackoverflow.questions;

import com.google.gson.*;

import java.util.ArrayList;
import java.util.List;

public class ParentChildApp {

   public static class Entry {

      private String name;

      public Entry(String name) {
         this.name = name;
      }

      private List<Entry> children;

      public void add(Entry node){
         if (children == null)
            children = new ArrayList<Entry>();
         children.add(node);
      }

   }

   public static void main(String[] args) {

      Entry workNode = new Entry("Work");
      workNode.add(new Entry("Effort"));
      workNode.add(new Entry("Trust"));

      Entry salaryNode = new Entry("Salary");


      Entry cultureNode = new Entry("Culture");
      cultureNode.add(salaryNode);
      cultureNode.add(workNode);

      Gson g = new Gson();

      System.out.println(g.toJson(cultureNode));
   }

}
package stackoverflow.questions;
导入com.google.gson.*;
导入java.util.ArrayList;
导入java.util.List;
公共类ParentChildApp{
公共静态类条目{
私有字符串名称;
公共条目(字符串名称){
this.name=名称;
}
私人名单儿童;
公共作废添加(条目节点){
if(children==null)
children=newarraylist();
添加(节点);
}
}
公共静态void main(字符串[]args){
条目工作节点=新条目(“工作”);
添加(新条目(“努力”);
添加(新条目(“信任”);
分录工资节点=新分录(“工资”);
条目cultureNode=新条目(“文化”);
cultureNode.add(salaryNode);
cultureNode.add(工作节点);
Gson g=新的Gson();
System.out.println(g.toJson(cultureNode));
}
}
您将获得所需的JSON

这样做:

package stackoverflow.questions;

import com.google.gson.*;

import java.util.ArrayList;
import java.util.List;

public class ParentChildApp {

   public static class Entry {

      private String name;

      public Entry(String name) {
         this.name = name;
      }

      private List<Entry> children;

      public void add(Entry node){
         if (children == null)
            children = new ArrayList<Entry>();
         children.add(node);
      }

   }

   public static void main(String[] args) {

      Entry workNode = new Entry("Work");
      workNode.add(new Entry("Effort"));
      workNode.add(new Entry("Trust"));

      Entry salaryNode = new Entry("Salary");


      Entry cultureNode = new Entry("Culture");
      cultureNode.add(salaryNode);
      cultureNode.add(workNode);

      Gson g = new Gson();

      System.out.println(g.toJson(cultureNode));
   }

}
package stackoverflow.questions;
导入com.google.gson.*;
导入java.util.ArrayList;
导入java.util.List;
公共类ParentChildApp{
公共静态类条目{
私有字符串名称;
公共条目(字符串名称){
this.name=名称;
}
私人名单儿童;
公共作废添加(条目节点){
if(children==null)
children=newarraylist();
添加(节点);
}
}
公共静态void main(字符串[]args){
条目工作节点=新条目(“工作”);
添加(新条目(“努力”);
添加(新条目(“信任”);
分录工资节点=新分录(“工资”);
条目cultureNode=新条目(“文化”);
cultureNode.add(salaryNode);
cultureNode.add(工作节点);
Gson g=新的Gson();
System.out.println(g.toJson(cultureNode));
}
}

您将获得所需的JSON

当您可以创建适当的映射和列表结构并自动创建它时,为什么要操纵字符串来创建JSON?如果您想使用JSP,请检查下面的答案,当您可以创建适当的映射和列表结构并自动创建它时,为什么要操纵字符串来创建JSON?如果您想使用JSP,请检查下面的答案