我正在尝试解析一些看起来像这样的XML:
<correlationMatrix>
<assetMatrix numAssets="45">
<correlations asset="Name1" />
<correlations asset="Name2">
<correlation asset="Name3">1.23</correlation>
</correlations>
<correlations asset="Name4">
<correlation asset="Name5">2.34</correlation>
<correlation asset="Name6">3.45</correlation>
</correlations>
</assetMatrix>
</correlationMatrix>
我创建了3个类:
@JsonIgnoreProperties(ignoreUnknown = true)
public class CorrelationMatrix {
private List<Correlations> assetMatrix;
public List<Correlations> getAssetMatrix() {
return assetMatrix;
}
public void setAssetMatrix(List<Correlations> assetMatrix) {
this.assetMatrix = assetMatrix;
}
}
和
@JsonIgnoreProperties(ignoreUnknown = true)
public class Correlations {
private String asset;
private List<Correlation> correlation;
public String getAsset() {
return asset;
}
public void setAsset(String asset) {
this.asset = asset;
}
public List<Correlation> getCorrelation() {
return correlation;
}
public void setCorrelations(List<Correlation> correlation) {
this.correlation = correlation;
}
}
然后最后
@JsonIgnoreProperties(ignoreUnknown = true)
public class Correlation {
}
如您所见,我已经从最终的内部类中删除了所有内容,但是仍然无法解析。我试过从输入中删除
<correlations asset="Name1" />
,但这不是问题的根源。如果我从“关联”中删除private List<Correlation> correlation;
,则可以成功解析,但显然没有我需要的信息。我在这里需要做些什么来使用Jackson解析从XML到Java的2维数组的本质(如果重要的话是2.2.0)是什么?
我得到的错误是:
Missing name, in state: START_OBJECT (through reference chain: CorrelationMatrix["assetMatrix"]->Correlations["correlation"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(
更新:
问题似乎与
correlation
中的值有关。如果我从示例数据中删除了1.23、2.34和3.45,则会对其进行解析-因此我需要以某种方式告诉Jackson如何映射它们。 最佳答案
我能够使用这些经过修改的类(添加getter,setter和在setCorrelation
中使用正确的名称Correlations
)来解析示例xml中的所有元素:
class CorrelationMatrix {
private AssetMatrix assetMatrix;
}
class AssetMatrix {
@JacksonXmlProperty(isAttribute = true)
private int numAssets;
@JacksonXmlElementWrapper(useWrapping = false)
private List<Correlations> correlations;
}
class Correlations {
@JacksonXmlProperty(isAttribute = true)
private String asset;
@JacksonXmlElementWrapper(useWrapping = false)
private List<Correlation> correlation;
}
class Correlation {
@JacksonXmlProperty(isAttribute = true)
private String asset;
@JacksonXmlText
private double correlation;
}
@JsonIgnoreProperties(ignoreUnknown = true)
@JacksonXmlProperty(isAttribute = true)
等属性需要asset
numAssets
进行指定。@JacksonXmlElementWrapper(useWrapping = false)
解析最里面的双精度数字。 @JacksonXmlText
来捕获AssetMatrix