關於Jackson中JsonNode的取值asText()和textValue()區別


在 比較高版本的Jackson 中, 包名為 com.fasterxml.jackson 

 1 String jsonText="{\"name\":\"張三\","age":16,\"other\":\"312312.22\"}"
 2 // JsonTools.text2Node() 為自己工具類請無視
 3 JsonNode node = JsonTools.text2Node(jsonText);
 4 // 一般我們需要從node中取值
 5 node.get("name");
 6 node.get("name").asText();
 7 node.get("name").asText("默認值");
 8 node.get("name").textValue();
 9 
10 // 結果依次是
11 // "張三"
12 // 張三
13 // 張三
14 // 張三
15 
16 node.get("age").asText();      // 結果為: 16
17 node.get("age").textValue();   // 結果為: null
18 
19 // 關於asText()和textValue()的區別

上面很清楚的可以看到:

  1.  如果 字段本身的值為 text 類型 的, 那么用 asText() 和 textValue() 獲取的結果是一致的;
  2.  如果 字段本身的值不是 text 類型的, 比如上面的 age 應該是數字類型的, 那么 asText() 會將最后的結果 16 轉換為text 然后返回, 而 textValue() 則取不到值會返回空null, 此時需要用 intValue() /longValue()/數值類型的取值方法才能取到值;
  3.  同理 如果字段本身不是 int 整數型, 那么asInt() 會將獲取的結果嘗試轉化為 int 然后返回, 而 intValue() 會返回空null;

    

 

  4. 關於其他類型的獲取值,同理: 如 longValue() 和 asLong() , asDouble() 和doubleValue();

 

需要補充一點, 如果字段在node中不存在, 則會報錯空指針, 因為 他會是先獲取,然后將結果轉換為text 但是 在前面一步 get("")的結果已經為空;

差異在於, 沒有值的 字段, 起碼key 是有的,此時會處理value 

 


免責聲明!

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



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