FlexJSON更改属性名称 - 在日期字段上

时间:2012-07-05 01:01:56

标签: java json flexjson

我从这里找到了这段代码:Change property name with Flexjson

它适用于String数据类型,但似乎没有其他类型。有什么想法吗?

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((String) object);

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

这适用于文本字段,但如果我尝试将其应用于日期字段,则会非常不满意。例如:

    String JSON = new JSONSerializer()
        .include("type", "createDate")
        .exclude("*")
        .transform(new DateTransformer("MM/dd/yyyy"), Date.class)
        .transform(new FieldNameTransformer("new_json_property_name"),"createDate")
        .serialize(stuff);

发生JSONException失败:尝试使用deepSerialize时出错

当我注释掉变换新的Field ...行时它工作正常,当我尝试更改类型字段(它是一个String)时,它工作正常。

尝试修改和Int时也失败了,我希望其他所有的东西都不是String。

如果有人熟悉FlexJSON API并且可以指出我正确的方向,我非常感谢。

1 个答案:

答案 0 :(得分:-1)

您只需要更改代码的这一部分:

getContext().writeQuoted((String) object);

对于大多数类型,如果将其更改为:

,它应该有效
getContext().writeQuoted(object.toString());

如果这对Date值不起作用 - 只需重写像这样的SimpleDateFormat:

SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
getContext().writeQuoted(sdf.format(object));

这应该可以解决问题。