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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM