我需要使用Google Gson库将简单Java对象列表序列化为JSON。
物体:
public class SimpleNode { private String imageIndex; private String text; public String getImageIndex() { return imageIndex; } public void setImageIndex(String imageIndex) { this.imageIndex = imageIndex; } public String getText() { return text; } public void setText(String text) { this.text = text; } }
我编写了以下代码进行序列化:
List<SimpleNode> testNodes = repository.getElements(0); Gson gson = new Gson(); String jsonNodesAsString = gson.toJson(testNodes);
它可以工作,但是JSON对象的字段名称是lowerCamelCase。像这样:
[ { "imageIndex": "1", "text": "Text 1" }, { "imageIndex": "2", "text": "Text 2" } ]
如何获取具有UpperCamelCase字段名称的JSON,如下所示:
[ { "ImageIndex": "1", "Text": "Text 1" }, { "ImageIndex": "2", "Text": "Text 2" } ]
我认为可以将成员变量重命名为UpperCamelCase,但是可能还有另一种方法吗?
来自文档:
Gson支持一些预定义的字段命名策略,以将标准Java字段名称(即以小写—“ sampleFieldNameInJava”开头的驼峰式名称)转换为Json字段名称(即sample_field_name_in_java或SampleFieldNameInJava)。有关预定义的命名策略的信息,请参见FieldNamingPolicy类。
它还具有基于注释的策略,允许客户在每个字段的基础上定义自定义名称。请注意,基于注释的策略具有字段名称验证,如果提供了无效的字段名称作为注释值,则将引发“运行时”异常。
以下是如何同时使用Gson命名策略功能的示例:
private class SomeObject { @SerializedName("custom_naming") private final String someField; private final String someOtherField; public SomeObject(String a, String b) { this.someField = a; this.someOtherField = b; } } SomeObject someObject = new SomeObject("first", "second"); Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create(); String jsonRepresentation = gson.toJson(someObject); System.out.println(jsonRepresentation);
========输出========
{"custom_naming":"first","SomeOtherField":"second"}
但是,对于您想要的,您可以使用以下代码:
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create();
通过使用UPPER_CAMEL_CASE选项,您可以实现自己的目标。