【问题标题】:Change property name with Flexjson使用 Flexjson 更改属性名称
【发布时间】:2011-10-04 18:12:42
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java serialization flexjson


    【解决方案1】:

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

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

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

    下面贴的是我写的FieldNameTransformer的代码,用于手动指定字段名s:

    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"}
    

    【讨论】:

    • 非常强大的技术...感谢您的帮助!
    • 这个FieldNameTransformer很有用,应该包含在Flexjson中。
    • 嗯,如果重命名的字段是地图,这将不起作用。结果变成"{key=value}",但应该是{"key":"value"}
    猜你喜欢
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 2012-01-18
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    相关资源
    最近更新 更多