获取复杂对象中所有字段和值

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.collections4.MultiValuedMap;
import org.apache.commons.collections4.multimap.ArrayListValuedHashMap;

import java.util.Iterator;
import java.util.Map;

/**
 * 获取复杂对象中 所有字段 和值
 * <code>
 *    {
 *     "displayName":"wqwqwq",
 *     "mobile":"19978945612",
 *     "position":"",
 *     "sex":0,
 *     "idCardNo":"",
 *     "image":"",
 *     "country":"1002",
 *     "secretLevel":"4",
 *     "birthday":1619193600000,
 *     "nationality":"21",
 *     "workNo":"wqqwqwwq",
 *     "type":"3",
 *     "userEmail":"[email protected]",
 *     "swUserOfficePhone":"wqwqqw",
 *     "maritalStatus":"0",
 *     "certificateCn":"yttttttt",
 *     "status":2000,
 *     "jobInfo":{
 *         "companyJobInfo":{
 *             "orgId":"28953882975739904",
 *             "orgName":"",
 *             "email":"",
 *             "secretLevel":"",
 *             "officeAddress":"67878787",
 *             "jobLevel":"qwwqwq",
 *             "userOfficePhone":""
 *         },
 *         "userJobList":[
 *             {
 *                 "orgId":"73534012313059328",
 *                 "showOrder":78,
 *                 "orgNo":"213",
 *                 "job":"qwwwwwwww",
 *                 "position":"看了看",
 *                 "jobAttribute":"发的"
 *             }
 *         ]
 *     }
 * }
 * </code>
 *
 * @author Created by niugang on 2021-04-25 15:14
 */
public class GetObjectField {
    
    
    public static void main(String[] args) throws JsonProcessingException {
    
    
        //使用apache ArrayListValuedHashMap 防止 key重复 ,如果是标准对象 在属性定义时
        //会避免属性名重复的
        MultiValuedMap<String, Object> hashMap = new ArrayListValuedHashMap<>();
        ObjectMapper objectMapper = new ObjectMapper();
        String aa = "{\"displayName\":\"wqwqwq\",\"mobile\":\"19978945612\",\"position\":\"\",\"sex\":0,\"idCardNo\":\"\",\"image\":\"\",\"country\":\"1002\",\"secretLevel\":\"4\",\"birthday\":1619193600000,\"nationality\":\"21\",\"workNo\":\"wqqwqwwq\",\"type\":\"3\",\"userEmail\":\"[email protected]\",\"swUserOfficePhone\":\"wqwqqw\",\"maritalStatus\":\"0\",\"certificateCn\":\"yttttttt\",\"status\":2000,\"jobInfo\":{\"companyJobInfo\":{\"orgId\":\"28953882975739904\",\"orgName\":\"\",\"email\":\"\",\"secretLevel\":\"\",\"officeAddress\":\"67878787\",\"jobLevel\":\"qwwqwq\",\"userOfficePhone\":\"\"},\"userJobList\":[{\"orgId\":\"73534012313059328\",\"showOrder\":78,\"orgNo\":\"213\",\"job\":\"qwwwwwwww\",\"position\":\"看了看\",\"jobAttribute\":\"发的\"}]}}";
        JsonNode jsonNode = objectMapper.readTree(aa);
        recursiveProcessing(jsonNode, hashMap);
        System.out.println(hashMap);
        System.out.println(hashMap.size());

    }

    /**
     * 递归遍历
     *
     * @param jsonNode jsonNode
     * @param hashMap  hashMap
     */
    public static void recursiveProcessing(JsonNode jsonNode, MultiValuedMap<String, Object> hashMap) {
    
    
        Iterator<Map.Entry<String, JsonNode>> fields = jsonNode.fields();
        while (fields.hasNext()) {
    
    
            Map.Entry<String, JsonNode> next = fields.next();
            String key = next.getKey();
            JsonNode value = next.getValue();
            if (value.isObject()) {
    
    
                recursiveProcessing(value, hashMap);
            } else if (value.isArray()) {
    
    
                for (JsonNode node : value) {
    
    
                    recursiveProcessing(node, hashMap);
                }
            } else {
    
    
                  if (value.isNull()) {
    
    
                        hashMap.put(key, null);
                    } else {
    
    
                        if (value.isLong()) {
    
    
                            hashMap.put(key, value.asLong());
                        } else if (value.isInt()) {
    
    
                            hashMap.put(key, value.asInt());
                        } else if (value.isBoolean()) {
    
    
                            hashMap.put(key, value.asBoolean());
                        } else if (value.isBigDecimal()) {
    
    
                            hashMap.put(key, value.decimalValue());
                        } else if (value.isDouble()) {
    
    
                            hashMap.put(key, value.doubleValue());
                        } else if (value.isFloat()) {
    
    
                            hashMap.put(key, value.floatValue());
                        } else if (value.isBigInteger()) {
    
    
                            hashMap.put(key, value.bigIntegerValue());
                        } else {
    
    
                            hashMap.put(key, value.asText());
                        }
                    }
            }
        }
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/niugang0920/article/details/116701367
今日推荐