假設我有以下 json
[
{
"00080005":{
"vr":"CS",
"Value":[
"ISO_IR 100"
]
},
"00080054":{
"vr":"AE",
"Value":[
"DCM4CHEE"
]
}
}
]
如何創建一個自定義類來在java中映射它?我試過這個班級形狀
public class custom1 {
private Map<String, cusomt2> id;
}
和cusomt2形狀是
public class cusomt2 {
private Object vr;
private Object[] Value;
}
并使用杰克遜映射器進行映射
ObjectMapper mapper = new ObjectMapper();
List<custom1> test = Arrays.asList(mapper.readValue(responseStream, custom1[].class));
正如預期的那樣,給了我一個錯誤:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "00080005"
我想要“0008005”作為欄位值而不是欄位鍵,這些值是根據API動態變化的,那么如何映射這個json,除了最后一個選項op自定義反序列化之外還有其他直接方法嗎?
uj5u.com熱心網友回復:
該錯誤表明沒有id導致反序列化失敗的欄位。
但是,輸入 JSON 表示一個串列/映射陣列Map<String, Pojo>,其中Pojo應定義為:
@Data
class Pojo {
String vr;
String[] value;
}
然后應該使用TypeReference以下方法反序列化 JSON :
String json = ...; // long json string
ObjectMapper mapper = new ObjectMapper();
List<Map<String, Pojo>> data = mapper.readValue(json, new TypeReference<>() {});
uj5u.com熱心網友回復:
我知道問題是什么,實際上有兩個問題,@Alex Rudenko 解決了一個,另一個問題是 APIValue以大寫字母形式回傳,而不是value,實際上我Value在課堂上正確指定了它,但問題是它是私有的屬性,并且它是名為 getter 的getValue,這在映射時會混淆 jackson,它認為getValue是value欄位的 getter notValue
- 第一個解決方案(推薦)是在類中
@JsonProperty("Value")的Value屬性上設定注釋。
所以這個類現在看起來像這樣
public class custom1 {
private String vr;
@JsonProperty("Value")
private String[] Value;
//getter & setters
}
- 第二種解決方案是
Value公開,以避免使用它的吸氣劑。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/394906.html
