【问题标题】:Convert complex JSON to JAVA Object where different keys are to be converted into the same type of object将复杂的 JSON 转换为 JAVA 对象,其中不同的键将转换为相同类型的对象
【发布时间】:2019-10-01 12:53:58
【问题描述】:

我想将复杂的 JSON 转换为 Java 对象。我的问题是“child1”和“child2”包含相同的信息。

我还没有找到在转换 JSON 文件并从单个对象生成它们时自动检测 child1 和 child2 的解决方案。在我目前的解决方案中,孩子总是必须手动存储在课堂上。

这是 JSON 文件:

{
   "certs":[
      "cert1",
      "cert2"
   ],
   "parent":{
      "child01":{
         "prop1":"value1",
         "prop2":[
            "value1"
         ],
         "prop3":[
            "value1"
         ]
      },
      "child02":{
         "prop1":"value1",
         "prop2":[
            "value1"
         ],
         "prop3":[
            "value1"
         ]
      }
   }
}

这是父类的类:

  public class Application {
  ArrayList<Object> certs = new ArrayList<Object>();
  Parent ParentObject;


 // Getter Methods 

  public Parent getParent() {
    return ParentObject;
  }

 // Setter Methods 

  public void setParent( Parent parentObject ) {
    this.ParentObject = parentObject;
  }
}

这是为每个孩子创建一个对象的类:

public class Parent {
  Child1 Child1Object;
  Child2 Child2Object;


 // Getter Methods 

  public Child1 getChild1() {
    return Child1Object;
  }

  public Child2 getChild2() {
    return Child2Object;
  }

 // Setter Methods 

  public void setChild1( Child1 child1Object ) {
    this.Child1Object = child1Object;
  }

  public void setChild2( Child2 child2Object ) {
    this.Child2Object = child2Object;
  }
}
public class Child2 {
  private String prop1;
  ArrayList<Object> prop2 = new ArrayList<Object>();
  ArrayList<Object> prop3 = new ArrayList<Object>();


 // Getter Methods 

  public String getProp1() {
    return prop1;
  }

 // Setter Methods 

  public void setProp1( String prop1 ) {
    this.prop1 = prop1;
  }
}

这是孩子的班级:

public class Child1 {
  private String prop1;
  ArrayList<Object> prop2 = new ArrayList<Object>();
  ArrayList<Object> prop3 = new ArrayList<Object>();


 // Getter Methods 

  public String getProp1() {
    return prop1;
  }

 // Setter Methods 

  public void setProp1( String prop1 ) {
    this.prop1 = prop1;
  }
}

我不想在父类中单独指定每个对象,因为这意味着如果 JSON 文件使用新子类扩展,我每次都必须手动使用子类扩展类。

当我转换 JSON 文件时,应该自动识别孩子的,并且应该为每个孩子生成一个具有孩子名称(child1,child2)的对象,而无需手动输入名称“child1”和“child2”父类。

【问题讨论】:

  • 你应该把child1child2放在一个数组中(children

标签: java json


【解决方案1】:

您永远不应该有完全相同的对象的重复条目,您应该期望所述对象的列表(或其他形式的集合),因为它始终是可扩展的,并且适合任何场景

【讨论】:

  • 问题在于 JSON 文件中的条目“child01”和“child02”具有相同的结构,但名称不同。我希望 gson 生成多个对象或对象列表,而无需在父类中手动指定每个名称(child01 或 child02)。
  • 在这种情况下,我能想到的唯一解决方案是为父节点实现一个自定义反序列化器,您将在其中获取每个子节点并将其序列化为一个集合
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
相关资源
最近更新 更多