[英]How to map snake case yaml to camelcase java fields with Jackson
[英]Convert nested map fields to snake case
如何將呈現為 json 的以下 object 的所有嵌套字段轉換為 snake_case? 鑒於它被讀取為org.bson.Document
, jackson object 映射器將無法工作,因為它是為 POJO 設計的,並且這里不可能有 POJO,因為記錄是無模式的
{
"project_data":[
{
"color":"#ffcd03",
"boardId":"30022"
},
{
"color":"#ffcd03",
"boardId":"1559427"
}
],
"type":"Standard",
"enterprise_id":"30000",
"version":"10",
"card_type_id":"30017",
"owner_type":"Org",
"timestamp":"1640901794509"
}
可以通過向SimpleModule
添加自定義鍵序列化程序來輕松完成,然后將其注冊到ObjectMapper
,如下所示:
創建一個 class SnakeCaseSerializer
,它擴展了JsonSerializer
以覆蓋serialize()
以使用 Google Guava 庫 - CaseFormat將鍵從小駝峰大小寫修改為小寫下划線大小寫(又名蛇大小寫)。
public class SnakeCaseSerializer extends JsonSerializer<String> {
@Override
public void serialize(String s, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
String fieldNameNew = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, s);
jsonGenerator.writeFieldName(fieldNameNew);
}
}
將此 class 添加到SimpleModule
作為自定義密鑰序列化程序,然后將模塊注冊到您的ObjectMapper
。 (這種方式將更改所有字段名稱,但這並不重要,因為屬於第一級的字段名稱已經在蛇形大小寫。)
SimpleModule simpleModule = new SimpleModule();
simpleModule.addKeySerializer(String.class, new SnakeCaseSerializer());
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(simpleModule);
System.out.println(objectMapper.writerWithDefaultPrettyPrinter()
.writeValueAsString(objectMapper.readValue(jsonStr, Object.class)));
控制台 output:
{
"project_data" : [ {
"color" : "#ffcd03",
"board_id" : "30022"
}, {
"color" : "#ffcd03",
"board_id" : "1559427"
} ],
"type" : "Standard",
"enterprise_id" : "30000",
"version" : "10",
"card_type_id" : "30017",
"owner_type" : "Org",
"timestamp" : "1640901794509"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.