如何使用动态字段集解析数据?

时间:2013-07-03 09:39:35

标签: java

如果我需要使用动态字段集解析传入数据,我应采取什么方法。我可以请求List这些字段,因此我知道运行时字段的数量及其名称。我不知道如何构造一个model,我会用它来解析数据并在之后使用。非常感谢任何建议。

3 个答案:

答案 0 :(得分:0)

虽然你的问题不明确,但我会尽力回答。如果您知道字段名称,则必须执行命令行,提供参数并检索其值。 如果您知道分隔符,那么解析很容易。对于复杂的数据结构,您可以使用正则表达式构造语法来解析。

答案 1 :(得分:0)

您可以使用reflection

另一种简单方法:

1)在for循环中将动态List解析为JSON字符串,或者使用键作为字段名称和值作为字段值来制作映射而不是列表。

2)将JSON字符串或地图转换为任何JSON lib

答案 2 :(得分:0)

我会使用javabean中的属性名称/属性值对,但是,为了跟踪,我还要添加一些枚举属性允许值的业务类(或接口)。

让代码说话:

class MyBean {
  String name;
  Object value;

  // Getters and setters
}

现在,如果其中一个列表中有一只狗,我们可能会有一个类:

class Dog {
   private List<MyBean> dataSet;

   // Enumerate the possible values of MyBean.name for a valid Dog object
   public final static String KIND = "kind";
   public final static String AGE = "age";
   public final static String BARFES = "heBarf";

   // Use a convenience Set for checks
   public static Set<String> validAttributes;

   // Put valid values in the convenience set once for all
   static {
     // trivial code to initialize the validAttributes set 
   }

   // We won't add setters, better constructing a new object every time
   public Dog(List<MyBean> v) {
      dataSet = v; // better copying ? as usual it depends on scenarios. 
   }

   // A convenience static to parse a string into this object.
   public static Dog parse(String theStream) {
      // cannot write since I don't know how is format, but this method can use the enumerations of the attribute names for checking. 
   }

   // Accessor
   public int getAge() {
      return dataSet.get(Dog.AGE);
   }

}

好的可能性是无限的。您可以拥有一个基类(List)并将其用作业务类的基类(仅添加getter和正确的构造函数)或使用List作为私有数据成员(记住将其隐藏 -​​ 不要直接使用访问其参考)。

你也可以选择一些枚举。重要的是,在使用这种元数据时(因为最终这些是元数据)是跟踪有效名称(没有编译检查,所以你需要有某种快速和污垢的方式来监视事物)。

PS:不介意代码,实际上只是一个概念证明(可能甚至不会编译)。