我从这里找到了这段代码: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并且可以指出我正确的方向,我非常感谢。
答案 0 :(得分:-1)
您只需要更改代码的这一部分:
getContext().writeQuoted((String) object);
对于大多数类型,如果将其更改为:
,它应该有效getContext().writeQuoted(object.toString());
如果这对Date值不起作用 - 只需重写像这样的SimpleDateFormat:
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
getContext().writeQuoted(sdf.format(object));
这应该可以解决问题。