Java 如何将带破折号的Json字段转换为带下划线的Avro字段?
我有一个带有json的字符串,其属性包含破折号。我想将其转换为带有下划线字段的Avro对象。我试图使用Gson库,但得到的是null而不是值 Avro车型类别(目标): JSON(来源): 转换:Java 如何将带破折号的Json字段转换为带下划线的Avro字段?,java,json,gson,avro,Java,Json,Gson,Avro,我有一个带有json的字符串,其属性包含破折号。我想将其转换为带有下划线字段的Avro对象。我试图使用Gson库,但得到的是null而不是值 Avro车型类别(目标): JSON(来源): 转换: final Gson gson = new GsonBuilder() .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES) .setFieldNamingStrategy(new Packag
final Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES)
.setFieldNamingStrategy(new PackageFieldNamingStrategy())
.registerTypeAdapter(Double.class, new DoubleSerializer())
.create();
Contract avroObject = GSON_SERIALIZER.fromJson(data);
// printing avroObject.contract_id
我的合同id为null
如果破折号替换为下划线,并且.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_与破折号)
已删除代码返回正确的值。Policy
FieldNamingPolicy。如果字段名为constract
,则小写字母带破折号将起作用。因为不是这样,所以您需要定义自己的FieldNamingStrategy
,例如:
public static class MyStrategy implements FieldNamingStrategy {
@Override
public String translateName(Field f) {
return f.getName().replace('_', '-');
}
}
然后像这样使用它:
Gson gson = new GsonBuilder()
.setFieldNamingStrategy(new MyStrategy())
.create();
或者在构建Gson时,只需内联,不需要额外的类:
.setFieldNamingStrategy( f -> f.getName().replace('_', '-'))
非常感谢你
Gson gson = new GsonBuilder()
.setFieldNamingStrategy(new MyStrategy())
.create();
.setFieldNamingStrategy( f -> f.getName().replace('_', '-'))