使用fastjson解析技巧

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

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

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

public void setNameLabel(List 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 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中

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

你可能感兴趣的:(Json解析,json,结构)