如何在Jackson上使用两种json格式

时间:2019-12-17 10:03:47

标签: java json serialization jackson deserialization

我上课的字段为names

private List<String> names;

我得到的杰森看起来像:

"names": [
 {
   "name": "a",
 },
 {
   "name": "b",
 },
 {
   "name": "c",
 }
]

所以我使用自定义序列化将此json转换为List:

@JsonProperty("names")
private void deserializeNames(List<Map<String, String>> json) {
    names = json.stream().map(e -> e.get("name")).collect(Collectors.toList());
}

此解决方案有效,但是当我要序列化我的类的对象时,新的json将如下所示:

"names": [
  "a",
  "b",
  "c"
]

我的自定义序列化代码将无法使用,因为它需要Map而不是List

我试图使用instanceof来解决该问题,或者使用反序列化列表进行映射,但是我认为这是错误的解决方案。 有没有解决这个问题的简便方法?

1 个答案:

答案 0 :(得分:1)

您无需为此编写自定义反序列化器, 您可以定义一个类,

function DeleteYESColumnF() {
// This Code will delete any "YES" in Column F.
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();

var rowsDeleted = 0;
for (var i = 0; i <= numRows - 1; i++) {
var row = values[i];
if (row[5] == 'YES') {
sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
rowsDeleted++;
}
}
};

您可以使用

class Name {
   @JsonProperty("name")
   String name;
   Name () {
   }
} 

这将自动反序列化。在序列化时,它将执行相同的操作。