使用fastjson解析技巧

来源:互联网 发布:淘宝联盟微信打不开 编辑:程序博客网 时间:2024/05/16 08:20

场景:
最近因为公司的一个业务在不同环境下不同的展示,PC端和移动端,两种不同的展示效果导致了在一段JSON字符串中存储了不同结构的不同键,简单说就是

{    "key1":{        "key2":{            "value1":1,            "value2":1        },        "value1":1,        "value2":1    },    "key2":{        "value1":1,        "value2":1    }}

由于PC端对两个键值的关系分别展示,展示不同的效果,但是在移动端需要兼容两个键的值,即把两个键中的值合并到同一个字段中展示。
问题来了,怎么通过JSON解析把key1中的key2和正常的key2合并
这里写图片描述
两个key2是相同的类
测试了一下fastjson解析是通过反射进行解析的,它不关心反射的类是不是你存进去对应的class。只关心能不能找到相同的键
所以我定义了两个属性,分别是key1和key2,key1是一个JSONObject,而key2是一个对应的实体类
在setKey1()方法的时候把需要实现的逻辑代码放进去就可以了

public void setNameLabel(List<NameLabelDto> nameLabel) {        for (int i = 0; i < nameLabel.size(); i++) {            NameLabelDto dto = nameLabel.get(i);            if (!this.nameLabel.contains(dto) && dto.getId() > 0) {                this.nameLabel.add(dto);            }        }    }public void setFaceList(List<JSONObject> faceList) {        for (int i = 0; i < faceList.size(); i++) {            JSONObject json = faceList.get(i);            NameLabelDto dto = new NameLabelDto();            dto = JSONObject.parseObject(json.getString("member"), NameLabelDto.class);            if (!this.nameLabel.contains(dto) && dto.getId() > 0) {                this.nameLabel.add(dto);            }        }    }

把这个代码贴上去
大致意思就是在set方法的时候把获取到的值放入到已存在的list中

因为不知道哪一个字段先解析,所以就会有个问题,如果后解析的字段中那个值为空就会把原来的值进行覆盖,所以进行判断之后进行去重添加就不会有问题了。