jsonNode的使用

参考:https://ask.csdn.net/questions/323583
json是一个字符串,jsonNode是一个对象!
可以将json转换成jsonNode,jsonNode中都是键值对形式,可以根据Key取出对应的值!

JsonNode 和 json 互转

import java.io.IOException;
import java.util.Iterator;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonTest {

    public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {  
        String json = "{\"username\":\"zhangsan\",\"性别\":\"男\",\"company\":{\"companyName\":\"中华\",\"address\":\"北京\"},\"cars\":[\"奔驰\",\"宝马\"]}";
        ObjectMapper mapper = new ObjectMapper();
        //JSON ----> JsonNode
        JsonNode rootNode = mapper.readTree(json);
        Iterator<String> keys = rootNode.fieldNames();
        while(keys.hasNext()){
            String fieldName = keys.next();
            System.out.println(fieldName + ": " + rootNode.path(fieldName).toString());
        }
        //JsonNode ----> JSON
        System.out.println(mapper.writeValueAsString(rootNode));
    }
	
	
    /**
     * 将json(json字符串)的fields层级链值解析为type类型的对象
     * @param json json字符串
     * @param clazz 出参类型
	 * @param fields json中层级链,{"a":"","b":""}==>{"a","b"}=fields
     * @param <T>
     * @return
     */
    public static <T> T toObject(String json, Class<T> clazz, String...fields) {
        ObjectMapper mapper = new ObjectMapper();
		//方便的转换方法,将给定的JSON树包含的数据绑定到特定的值(通常是bean)类型。
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        JsonNode node;
        try {
            if (null == json || "".equals(json))
                return null;
            node = mapper.readTree(json);
            if (null != fields && fields.length > 0) {
                for(String field : fields) {
                    node = node.get(field);
                }
            }//方便的转换方法,将给定的JSON树包含的数据绑定到特定的值(通常是bean)类型。
            return mapper.treeToValue(node, clazz);
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }
        return null;
    }

}

如果json(String)不是一个json格式,mapper.readTree(json)会返回一个null,后面调用会报错
image

posted @ 2021-07-26 14:36  EH点点滴滴  阅读(3549)  评论(0编辑  收藏  举报