gpt4 book ai didi

java - 使用 Flexjson 更改属性名称

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:55:25 24 4
gpt4 key购买 nike

我使用 FlexJson 进行序列化,唯一的问题是它生成小写的字段名称,而我需要它们以大写开头:

class Person
{
String name;
public String getName() { return name;}
}

序列化时,该字段被序列化为 name,而我需要它是 Name

如何指定输出字段名称?我可以添加一些属性来指定所需的序列化名称吗?

最佳答案

您可以使用Custom Transformer 来实现这一点。根据 Flexjson 页面转换器是:

Responsible for deciding how to translate the passed in object to JSON, making the appropriate calls on the JSONContext object to output the JSON, and/or passing the object along the transformation process.

Flexjson 提供了一个抽象类AbstractTransformer以此目的;扩展并覆盖 transform(Object object) 以自行处理转换。

下面粘贴的是我为手动指定字段名称而编写的 FieldNameTransformer 代码:

public class FieldNameTransformer extends AbstractTransformer {
private String transformedFieldName;

public FieldNameTransformer(String transformedFieldName) {
this.transformedFieldName = transformedFieldName;
}

public void transform(Object object) {
boolean setContext = false;

TypeContext typeContext = getContext().peekTypeContext();

//Write comma before starting to write field name if this
//isn't first property that is being transformed
if (!typeContext.isFirst())
getContext().writeComma();

typeContext.setFirst(false);

getContext().writeName(getTransformedFieldName());
getContext().writeQuoted(object.toString());

if (setContext) {
getContext().writeCloseObject();
}
}

/***
* TRUE tells the JSONContext that this class will be handling
* the writing of our property name by itself.
*/
@Override
public Boolean isInline() {
return Boolean.TRUE;
}

public String getTransformedFieldName() {
return this.transformedFieldName;
}
}

以下是如何使用这个自定义转换器:

JSONSerializer serializer = new JSONSerializer().transform(new FieldNameTransformer("Name"), "name");

原始字段的名称是“名称”,但在 json 输出中它将被替换为名称。

抽样:

{"Name":"Abdul Kareem"}

关于java - 使用 Flexjson 更改属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7652231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com