Java 如何创建一个包含一个根节点和两个子节点的json树

Java 如何创建一个包含一个根节点和两个子节点的json树,java,json,Java,Json,我已经用java创建了一个json,它有一个根节点和几个子节点。现在我有一个要求,根下的子节点可能也有一些子节点。但我无法做到这一点。以下是我到目前为止所做的 class Entry { private String name; public String getChildren() { return name; } public void setChildren(String name) { this.name = name

我已经用java创建了一个json,它有一个根节点和几个子节点。现在我有一个要求,根下的子节点可能也有一些子节点。但我无法做到这一点。以下是我到目前为止所做的

class Entry {

    private String name;

    public String getChildren() {
        return name;
    }

    public void setChildren(String name) {
        this.name = name;
    }
}

public class JsonApplication {

    public static void main(String[] args) {
    // TODO code application logic here

        String arr[] = {"Culture", "Salary", "Work", "Effort"};
        EntryListContainer entryListContainer = new EntryListContainer();
        List<Entry> entryList1 = new ArrayList<>();
        List<Entry> entryList2 = new ArrayList<>();
        for (int i = 0; i < arr.length; i++) {
            Entry entry1 = new Entry();
            entry1.setChildren(arr[i]);
            entryList1.add(entry1);
            entryList2.add(entry1);

            /*Child nodes are created here and put into entryListContainer*/
            entryListContainer.setEntryList1(entryList1);
            entryListContainer.setEntryList1(entryList2);
        }


        /*Root node this will collapse and get back to Original position on click*/

        entryListContainer.setName("Employee");     
        entryListContainer.setName("Culture");  
        Map<String, String> mapping = new HashMap<>();
        mapping.put("entryList1", "name");

        Gson gson = new GsonBuilder().serializeNulls().setFieldNamingStrategy(new DynamicFieldNamingStrategy(mapping)).create();
        System.out.println(gson.toJson(entryListContainer));
    }
}

class DynamicFieldNamingStrategy implements FieldNamingStrategy {

    private Map<String, String> mapping;

    public DynamicFieldNamingStrategy(Map<String, String> mapping) {
        this.mapping = mapping;
    }

    @Override
    public String translateName(Field field) {
       String newName = mapping.get(field.getName());
       if (newName != null) {
           return newName;
       }

       return field.getName();
    }
}

class EntryListContainer {

    private List<Entry> children;
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setEntryList1(List<Entry> entryList1) {
        this.children = entryList1;
    }

    public List<Entry> getEntryList1() {
        return children;
    }
}
但我需要

{
  "name":"Culture",
  "children":[
    {
      "name":"Culture"
    },
    {
      "name":"Salary"
    },
    {
      "name":"Work"
    },
    {
      "name":"Effort"
    }
  ],
  "name":"Work",
  "children" : [
    {
     "name":"Culture"
    },
    {
      "name":"Work"
    }
  ]
}

我对你的代码有点困惑,但有一点我很清楚:你想要得到什么。因此,我从头开始创建了一些代码,您可以复制并运行这些代码,以了解如何获得所需的JSON

可能元素的顺序对您来说很重要(请注意,在JSON中,键的对象顺序并不重要-是一个映射!-),因此我编辑了一些代码,这些代码不是纯粹的Gson方式,而是创建了您的示例

package stackoverflow.questions;

import java.lang.reflect.Field;
import java.util.*;

import com.google.gson.*;

public class JsonApplication {

   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);

   }
}

下次发布问题时,请先花些时间清理并格式化代码。这对于可读性非常重要,而且可以提高有人花时间阅读和回答您的问题的机会。您需要的不是有效的JSON。一个对象不能有两个相同的键。@JBNizet感谢您的关注。我只想将子节点设为父节点。例如,我想将Work设为根节点,它也将有3个子节点。首先正确定义您想要的,然后我们可以讨论如何做。目前,你的例子是不可能得到的。好的,我正在添加一些图片
package stackoverflow.questions;

import java.lang.reflect.Field;
import java.util.*;

import com.google.gson.*;

public class JsonApplication {

   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);

   }
}
{"name":"Culture",[{"name":"Salary"},{"name":"Work"},{"name":"Effort"}],"name":"Work",[{"name":"Culture"},{"name":"Work"}]}