我有一个带有json的字符串,属性中包含破折号。我想把它转换成一个带有下划线的字段的Avro对象。我尝试使用Gson库,但得到了一个空值而不是值。
- Avro型号类别**(目标):
@AvroGenerated
public class Contract extends SpecificRecordBase implements SpecificRecord {
public static final Schema SCHEMA$ = (new Parser()).parse("....."});
@Deprecated
public String contract_id;
public static Schema getClassSchema() {
return SCHEMA$;
}
- JSON**(源代码):
{"contract-id": "1372b63a_7c6a_4929_a99b_199fa870edc0"}
- 正在转换**:
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
合同标识为空。
如果将破折号替换为下划线并删除.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES)
代码将返回正确的值。
1条答案
按热度按时间u5i3ibmn1#
如果字段被命名为
contractId
,则FieldNamingPolicy.LOWER_CASE_WITH_DASHES
策略将起作用。因为它不是,所以您需要定义自己的FieldNamingStrategy
,例如:并像这样使用它:
或者只是在构建Gson时,内联而不使用额外的类: