Json   发布时间:2022-04-22  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了FastJSON个性化序列化大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

FastJSON个性化序列化



publicclassjstJobGoodsimplementsserializable{
@JSONField(serialize=falsE)
privateLongid;//ID
@JSONField(name="shop_id")
privateStringshopId;//店铺编号
@JSONField(name="i_id")
privateLongiId;//商品款号,商品ID
@JSONField(name="shop_i_id")
privateStringshopIId;//外部款号
@JSONField(name="name")
privateStringname;//名称
@JSONField(name="SALE_price")
privateLongSALEPrice;//销售价格
@JSONField(name="enabled")
privateIntegerenabled;//是否启用
@JSONField(name="brand_name")
privateStringbrandName;//品牌名称
@JSONField(name="market_price")
privateLongmarketPrice;//市场价格
@JSONField(serialize=falsE)
privateintrealSkuQt=0;//真实SKU数量
@JSONField(serialize=falsE)
privateStringdigit;//数据MD5(不含id和uptime计算所得)
@JSONField(serialize=falsE)
privatejava.util.Dateuptime;//更新时间

@JSONField(name="skus")
privateList<JstJobGoodsSku>goodsSkuList;

@JSONField(serialize=falsE)
privateOPTOPt=Opt.DO_NOTHING;

privatestaticPatternpnv=Pattern.compile("(.+):(.+)");
publicstaticserializeFilter[]serializeFilters=newserializeFilter[]{
newValueFilter(){
@Override
publicObjectprocess(Objectobject,Stringname,Objectvalue){
if(objecTinstanceofJstJobGoods){
JstJobGoodsgoods=(JstJobGoods)object;
if(name.equals("SALE_price"))
returnnumberFormat2((long)value/100);
if(name.equals("market_price"))
returnnumberFormat2((long)value/100);
}elseif(objecTinstanceofJstJobGoodsSku){
JstJobGoodsSkusku=(JstJobGoodsSku)object;
if(name.equals("SALE_price"))
returnnumberFormat2((long)value/100);
if(name.equals("market_price"))
returnnumberFormat2((long)value/100);
}
returnvalue;
}
},newBeforeFilter(){
@Override
publicvoidwriteBefore(Objectobject){
//尺码:22,颜色:黑色
if(objecTinstanceofJstJobGoods){
JstJobGoodsgoods=(JstJobGoods)object;
goods.setDigit(goods.getDigit());
}elseif(objecTinstanceofJstJobGoodsSku){
JstJobGoodsSkusku=(JstJobGoodsSku)object;
sku.setDigit(sku.getDigit());
Stringproperties=sku.getProperties();
if(properties==null||properties.trim().length()==0)return;
String[]nvs=properties.split(",");
StringBufferpropertiesNames=newStringBuffer();
StringBufferpropertiesValues=newStringBuffer();
for(Stringnv:nvs){
Matcherm=pnv.matcher(nv);
if(m.find()){
propertiesNames.append(m.group(1).trim()).append(',');
propertiesValues.append(m.group(2).trim()).append(',');
}
}
wipeEndSeparator(propertiesNames,',');
wipeEndSeparator(propertiesValues,');
sku.setPropertiesName(propertiesNames.toString());
sku.setPropertiesValue(propertiesValues.toString());
}
}

privatevoidwipeEndSeparator(StringBuffersb,charseparator){
if(sb.length()>0&&sb.charAt(sb.length()-1)==separator)
sb.deleteCharAt(sb.length()-1);
}
}
};


//getterandsetter...
publicstaticDoublenumberFormat2(doublevalue){
decimalFormatdf=newdecimalFormat("0.00");
df.setRoundingMode(RoundingMode.DOWN);
returnDouble.parseDouble(df.format(value));
}


Stringreq=JSON.toJSONString(needSynGoodsList,JstJobGoods.serializeFilters,serializerFeature.PrettyFormat,serializerFeature.WriteMapNullvalue);
[
	{
		"brand_name":"","enabled":1,"i_id":1174,"market_price":188.0,"name":"皮豆豆6620真皮战斗短靴大棉","SALE_price":158.0,"shop_i_id":"1174_001","shop_id":"10039844","skus":[
			{
				"brand_name":"","color":"","pic":"","pic_big":"","properties_name":"尺码,颜色","properties_value":"21,红色","shop_sku_id":"v_1572_001","sku_id":"r_1572"
			},{
				"brand_name":"",黑色","shop_sku_id":"v_1573_001","sku_id":"r_1573"
			}
		]
	}
]


{"code":0,"issuccess":true,"msg":null}


再给个例子:

importcom.alibaba.fastjson.JSON;
importcom.alibaba.fastjson.Annotation.JSONField;
importcom.alibaba.fastjson.serializer.AfterFilter;
importcom.alibaba.fastjson.serializer.beforeFilter;
importcom.alibaba.fastjson.serializer.serializeFilter;
importcom.alibaba.fastjson.serializer.ValueFilter;

importjava.util.ArrayList;
importjava.util.List;


publicclassFastJSONTest{
publicstaticvoidmain(String[]args){
Foof0=newFoo("asan",1100,24);
System.out.println("原始的Foo:\n"+f0);
Stringjson1=JSON.toJSONString(f0,newValueFilter(){
@Override
publicObjectprocess(Objectobject,Objectvalue){
switch(Name){
case"_val":return(Integer)value/10;
case"age":return(Integer)value+1;
default:returnvalue;
}
}
});
System.out.println("第1次序列化后的Foo:\n"+f0);
System.out.println(">>>JSON1"+json1);


Listlist=newArrayList();
list.add(f0);
Stringjson2=JSON.toJSONString(f0,newserializeFilter[]{
newBeforeFilter(){
@Override
publicvoidwriteBefore(Objectobject){
if(!(objecTinstanceofFoo))return;
Foof=(Foo)object;
f.setName(f.getName()+"++");
f.setAge(f.getAge()+100);
}
},newAfterFilter(){
@Override
publicvoidwriteAfter(Objectobject){
//if(!(objecTinstanceofFoo))return;
//Foof=(Foo)object;
//f.setName(f.getName().subString(0,f.getName().length()-2));
//f.setAge(f.getAge()-100);
}
}
});
System.out.println("第2次序列化后的Foo:\n"+f0);

System.out.println(">>>JSON2"+json2);
}

}

classFoo{
privateStringname;
@JSONField(name="_val",serialize=truE)
privateintval;
privateintage;

publicFoo(Stringname,intval,intagE){
this.name=name;
this.val=val;
this.age=age;
}

publicStringgetName(){
returnname;
}

publicvoidsetName(StringName){
this.name=name;
}

publicintgetVal(){
returnval;
}

publicvoidSETVAL(intval){
this.val=val;
}

publicintgetAge(){
returnage;
}

publicvoidsetAge(intagE){
this.age=age;
}

@Override
publicStringtoString(){
return"Foo{"+
"name='"+name+'\''+
",val="+val+
",age="+age+
'}';
}
}
原始的Foo:
Foo{name='asan',val=1100,age=24}
第1次序列化后的Foo:
Foo{name='asan',age=24}
>>>JSON1{"_val":110,"age":25,"name":"asan"}
第2次序列化后的Foo:
Foo{name='asan++',age=124}
>>>JSON2{"_val":1100,"age":124,"name":"asan++"}

Processfinishedwithexitcode0


https://www.w3cschool.cn/fastjson/fastjson-api.html


fastjson serializerFeature详解

http://blog.csdn.net/u010246789/article/details/52539576

大佬总结

以上是大佬教程为你收集整理的FastJSON个性化序列化全部内容,希望文章能够帮你解决FastJSON个性化序列化所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。