Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Flexjson更改属性名称_Java_Serialization_Flexjson - Fatal编程技术网

Java 使用Flexjson更改属性名称

Java 使用Flexjson更改属性名称,java,serialization,flexjson,Java,Serialization,Flexjson,我使用FlexJson进行序列化,唯一的问题是它生成的字段名是小写,而我需要它们以大写开头: class Person { String name; public String getName() { return name;} } 序列化时,字段被序列化为name,而我需要它是name 如何指定输出字段名?是否有一些属性可以指定所需的序列化名称?您可以通过使用自定义转换器来实现这一点。根据Flexjson,页面转换器为: 负责决定如何将传入的对象转换为 JSON,对JSO

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

class Person
{
     String name;
     public String getName() { return name;}
}
序列化时,字段被序列化为
name
,而我需要它是
name


如何指定输出字段名?是否有一些属性可以指定所需的序列化名称?

您可以通过使用自定义转换器来实现这一点。根据Flexjson,页面转换器为:

负责决定如何将传入的对象转换为 JSON,对JSONContext对象进行适当的调用以输出 JSON,和/或在转换过程中传递对象

Flexjson为此提供了一个抽象类;扩展并覆盖
变换(对象)
以自行处理变换

下面粘贴的是
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");
其中,原始字段的名称为“name”,但在json输出中,它将替换为name

抽样:

{"Name":"Abdul Kareem"}

非常强大的技术。。。谢谢你的帮助!这个FieldNameTransformer非常有用,应该包含在Flexjson.Hmmm中,如果重命名的字段是一个映射,这就不起作用。结果变成
“{key=value}”
,但应该是
{key:“value”}