0

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

4

3 回答 3

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:不要介意代码,实际上只是一个概念证明(可能甚至不会编译)。

于 2013-07-03T10:05:18.480 回答
0

虽然你的问题不清楚,但我会尽力回答。如果您知道字段名称,那么您将不得不像在命令行上所做的那样,提供参数并检索它们的值。如果您知道分隔符,那么解析很容易。对于复杂的数据结构,您可以使用正则表达式构造语法进行解析。

于 2013-07-03T09:45:48.223 回答
0

您可以使用反射

另一种简单的方法:

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

2) 使用任何JSON 库转换 JSON 字符串或映射。

于 2013-07-03T09:45:51.330 回答