FastJSON个性化序列化
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,FastJSON个性化序列化public class JstJobGoods implements Serializable { @JSONField(serialize = false)
千家信息网最后更新 2025年12月01日FastJSON个性化序列化
FastJSON个性化序列化
public class JstJobGoods implements Serializable { @JSONField(serialize = false) private Long id; //ID @JSONField(name = "shop_id") private String shopId; //店铺编号 @JSONField(name = "i_id") private Long iId; //商品款号,商品ID @JSONField(name = "shop_i_id") private String shopIId; //外部款号 @JSONField(name = "name") private String name; //名称 @JSONField(name = "sale_price") private Long salePrice; //销售价格 @JSONField(name = "enabled") private Integer enabled; //是否启用 @JSONField(name = "brand_name") private String brandName; //品牌名称 @JSONField(name = "market_price") private Long marketPrice; //市场价格 @JSONField(serialize = false) private int realSkuQt = 0; //真实SKU数量 @JSONField(serialize = false) private String digit; //数据MD5(不含id和uptime计算所得) @JSONField(serialize = false) private java.util.Date uptime; //更新时间 @JSONField(name = "skus") private List goodsSkuList; @JSONField(serialize = false) private Opt opt = Opt.DO_NOTHING; private static Pattern pnv = Pattern.compile("(.+):(.+)"); public static SerializeFilter[] serializeFilters = new SerializeFilter[]{ new ValueFilter() { @Override public Object process(Object object, String name, Object value) { if (object instanceof JstJobGoods) { JstJobGoods goods = (JstJobGoods) object; if (name.equals("sale_price")) return numberFormat2((long) value / 100); if (name.equals("market_price")) return numberFormat2((long) value / 100); } else if (object instanceof JstJobGoodsSku) { JstJobGoodsSku sku = (JstJobGoodsSku) object; if (name.equals("sale_price")) return numberFormat2((long) value / 100); if (name.equals("market_price")) return numberFormat2((long) value / 100); } return value; } }, new BeforeFilter() { @Override public void writeBefore(Object object) { //尺码:22,颜色:黑色 if (object instanceof JstJobGoods) { JstJobGoods goods = (JstJobGoods) object; goods.setDigit(goods.getDigit()); } else if (object instanceof JstJobGoodsSku) { JstJobGoodsSku sku = (JstJobGoodsSku) object; sku.setDigit(sku.getDigit()); String properties = sku.getProperties(); if (properties == null || properties.trim().length() == 0) return; String[] nvs = properties.split(","); StringBuffer propertiesNames = new StringBuffer(); StringBuffer propertiesValues = new StringBuffer(); for (String nv : nvs) { Matcher m = 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()); } } private void wipeEndSeparator(StringBuffer sb, char separator) { if (sb.length() > 0 && sb.charAt(sb.length() - 1) == separator) sb.deleteCharAt(sb.length() - 1); } } }; //getter and setter... public static Double numberFormat2(double value) { DecimalFormat df = new DecimalFormat("0.00"); df.setRoundingMode(RoundingMode.DOWN); return Double.parseDouble(df.format(value));}String req = 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":"", "enabled":1, "market_price":188.0, "name":"皮豆豆6620真皮战斗短靴大棉", "pic":"", "pic_big":"", "properties_name":"尺码,颜色", "properties_value":"21,红色", "sale_price":158.0, "shop_sku_id":"v_1572_001", "sku_id":"r_1572" }, { "brand_name":"", "color":"", "enabled":1, "market_price":188.0, "name":"皮豆豆6620真皮战斗短靴大棉", "pic":"", "pic_big":"", "properties_name":"尺码,颜色", "properties_value":"21,黑色", "sale_price":158.0, "shop_sku_id":"v_1573_001", "sku_id":"r_1573" } ] }]{"code":0,"issuccess":true,"msg":null}再给个例子:
import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.annotation.JSONField;import com.alibaba.fastjson.serializer.AfterFilter;import com.alibaba.fastjson.serializer.BeforeFilter;import com.alibaba.fastjson.serializer.SerializeFilter;import com.alibaba.fastjson.serializer.ValueFilter;import java.util.ArrayList;import java.util.List;public class FastJSONTest { public static void main(String[] args) { Foo f0 = new Foo("asan", 1100,24); System.out.println("原始的Foo:\n"+f0); String json1 = JSON.toJSONString(f0, new ValueFilter() { @Override public Object process(Object object, String name, Object value) { switch (name){ case "_val": return (Integer) value / 10; case "age": return (Integer) value +1; default: return value; } } }); System.out.println("第1次序列化后的Foo:\n"+f0); System.out.println(">>>JSON1"+json1); List list = new ArrayList(); list.add(f0); String json2 = JSON.toJSONString(f0,new SerializeFilter[]{ new BeforeFilter() { @Override public void writeBefore(Object object) { if(!(object instanceof Foo))return; Foo f = (Foo)object; f.setName(f.getName()+"++"); f.setAge(f.getAge()+100); } }, new AfterFilter() { @Override public void writeAfter(Object object) {// if(!(object instanceof Foo))return;// Foo f = (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); }}class Foo { private String name; @JSONField(name = "_val",serialize = true) private int val; private int age; public Foo(String name, int val, int age) { this.name = name; this.val = val; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getVal() { return val; } public void setVal(int val) { this.val = val; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Foo{" + "name='" + name + '\'' + ", val=" + val + ", age=" + age + '}'; }}原始的Foo:Foo{name='asan', val=1100, age=24}第1次序列化后的Foo:Foo{name='asan', val=1100, age=24}>>>JSON1{"_val":110,"age":25,"name":"asan"}第2次序列化后的Foo:Foo{name='asan++', val=1100, age=124}>>>JSON2{"_val":1100,"age":124,"name":"asan++"}Process finished with exit code 0https://www.w3cschool.cn/fastjson/fastjson-api.html
fastjson SerializerFeature详解
http://blog.csdn.net/u010246789/article/details/52539576
序列
尺码
真皮
颜色
短靴
豆豆
战斗
原始
价格
名称
商品
黑色
个性
例子
品牌
市场
市场价格
店铺
所得
数据
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
大型服务器的内存一般是多少
中国4g网络技术占比
清科数据库企业并购2019
物流仓储信息系统数据库
大话西游3经典服务器能转服吗
武林闲侠渠道服务器和官服互通吗
杨浦区营销软件开发常见问题
百事通网络技术有限公司
特灵数据服务器
北京定制网络技术服务机构
网络安全宣传周专题揭秘
成都软件开发教程
内乡网络安全宣传活动
网络安全威
伊泰OA服务器
软件开发 验收单
软件开发里程碑设置
高校 网络安全法 新闻
国内外大型网络安全事件案例
广州一呼百应网络技术公司
网络安全试卷试卷1
姚凯复旦人才数据库
关于网络安全教育的故事
中国财富网络安全宣传
吉林大学图书馆数据库导航
社保卡软件开发
国外服务器托管
西安软件开发四千工资低吗
网络资产信息技术数据库设计
宝山区一站式网络技术服务有哪些