我想把强调字段(如this_field_to_mapped)映射到camelcase(thisFieldToMapped)。
因此,我用Gson创建了GsonBuilder对象,并编写了一个实现了FieldNamingStrategy和SomeClass的新类。
我会从Gson.fromJson上运行{"thisItem" : "hello", "this_field_to_mapped":1},但是控制台日志已经这样打印出来了。
替换: thisItem 替换: thisFieldToMapped 你好 0
thisItem映射得很好,但是thisFieldToMapped打印了0。
如何将突出区域映射到camelcase?
这是我的密码。
SomeClass
public static class SomeClass {
public String thisItem;
public int thisFieldToMapped;
}UnderScoreToUpper
public static class UnderScoreToUpper implements FieldNamingStrategy {
public String translateName(Field f) {
String name = f.getName();
Pattern p = Pattern.compile("[_][a-z]{1}");
Matcher m = p.matcher(name);
while (m.find()) {
System.out.println("matched : " + m.group(0));
String c = m.group(0).replace("_", "").toUpperCase();
name = name.replace(m.group(0), c);
}
System.out.println("replaced : " + name);
return name;
}
}这是主要的方法
public static void main(String[] args) {
String gsonString = "{\"thisItem\" : \"hello\", \"this_field_to_mapped\":1}";
Gson g = new GsonBuilder()
.setDateFormat("yyyy-MM-dd HH:mm:ss")
.setFieldNamingStrategy(new UnderScoreToUpper())
.serializeSpecialFloatingPointValues().setPrettyPrinting()
.serializeNulls().create();
SomeClass c = g.fromJson(gsonString, SomeClass.class);
if (c != null) {
System.out.println(c.thisItem);
System.out.println(c.thisFieldToMapped);
}
}发布于 2016-07-26 00:42:25
你倒着干。用于FieldNamingStrategy状态的javadoc
一种在Gson中提供自定义字段命名的机制。这允许客户端代码将字段名转换为不受正常Java字段声明规则支持的特定约定。
另外,FieldNamingStrategy#translateName(String)的javadoc状态
将字段名转换为其JSON字段名表示形式。
如您所知,您收到的作为translateName参数的是Field本身。translateName的意思是将该字段的名称转换为将出现在JSON中的名称。
所以您需要将thisFieldToMapped转换为this_field_to_mapped。你正试图做相反的事。
如果所有JSON成员都使用下划线命名,则可以使用FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES作为策略。
https://stackoverflow.com/questions/38579412
复制相似问题