【问题标题】:Json Object with 2 nested objects of same type具有 2 个相同类型的嵌套对象的 Json 对象
【发布时间】:2014-09-17 11:18:23
【问题描述】:

我有一个非常简单的问题,似乎没有答案。

我有一个对象,里面有 2 个相同类型的对象,它们不是数组。我如何在 json 中表示它?

GroupOfEmployees{

Employee emp1;
Employee emp2;
}

Employee{
String name;
int id;
}

emp1 详细信息: 姓名:第一 编号:1

emp2 详细信息: 姓名:二 编号:2

【问题讨论】:

    标签: java json


    【解决方案1】:

    创建JSONArray:

    [
    {
    name: "name1",
    id: = id1 }, 
    {
    name: "name2",
    id: = id2 }
    ]
    

    【讨论】:

      【解决方案2】:

      如果您正在寻找代表 GroupOfEmployees 对象的 json 对象,那么示例 json 将如下所示

      {
          "emp1": {
              "name": "name1",
              "id": 1
          },
          "emp2": {
              "name": "name2",
              "id": 2
          }
      }
      

      更新
      当您将上述 json 转换为对象时,您将获得一个对象,其中包含两个名为 emp1 和 emp2 的员工对象。考虑下面的例子

      以下是您的员工类:

      public class Employee {
          private String name;
      
          private int id;
      
          public Employee(String name, int id) {
              this.name = name;
              this.id = id;
          }
      
          // getter & setter methods
      
          @Override
          public String toString() {
              StringBuilder builder = new StringBuilder();
              builder.append("Employee [name=");
              builder.append(name);
              builder.append(", id=");
              builder.append(id);
              builder.append("]");
              return builder.toString();
          }
      }
      

      以下是 GroupOfEmployees 类:

      public class GroupOfEmployees {
          private Employee emp1;
          private Employee emp2;
      
          // getters & setters method
      
          @Override
          public String toString() {
              StringBuilder builder = new StringBuilder();
              builder.append("GroupOfEmployees [emp1=");
              builder.append(emp1);
              builder.append(", emp2=");
              builder.append(emp2);
              builder.append("]");
              return builder.toString();
          }
      }
      

      这里是主要方法:

      public static void main(String[] args) {
          Employee emp1 = new Employee("name1", 1);
          Employee emp2 = new Employee("name2", 2);
      
          GroupOfEmployees groupOfEmployees = new GroupOfEmployees();
          groupOfEmployees.setEmp1(emp1);
          groupOfEmployees.setEmp2(emp2);
      
          Gson gson = new GsonBuilder().create();
      
          String jsonValue = gson.toJson(groupOfEmployees);
          System.out.println("jsonValue = " + jsonValue);
      
          GroupOfEmployees newGroup = gson.fromJson(jsonValue, GroupOfEmployees.class);
          System.out.println("Object value = " + newGroup);
      }
      

      最后的输出是:

      jsonValue = {"emp1":{"name":"name1","id":1},"emp2":{"name":"name2","id":2}}
      Object value = GroupOfEmployees [emp1=Employee [name=name1, id=1], emp2=Employee [name=name2, id=2]]
      

      【讨论】:

      • 实际上我想制作一个 json,以后可以使用 gson 库将其重新转换为提到的对象。所以在这个解决方案中,它将这个 json 转换为一个包含 2 个元素的员工对象数组,我想避免这种情况。我希望它们完全按照问题所示转换为 2 个单独的对象。如何做到这一点?
      • +1 因为你正确理解了这个问题。你能解释一下 toString 方法是如何被调用的吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      相关资源
      最近更新 更多