如果我需要使用动态字段集解析传入数据,我应采取什么方法。我可以请求List
这些字段,因此我知道运行时字段的数量及其名称。我不知道如何构造一个model
,我会用它来解析数据并在之后使用。非常感谢任何建议。
答案 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:不介意代码,实际上只是一个概念证明(可能甚至不会编译)。