在 比較高版本的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()的區別
上面很清楚的可以看到:
- 如果 字段本身的值為 text 類型 的, 那么用 asText() 和 textValue() 獲取的結果是一致的;
- 如果 字段本身的值不是 text 類型的, 比如上面的 age 應該是數字類型的, 那么 asText() 會將最后的結果 16 轉換為text 然后返回, 而 textValue() 則取不到值會返回空null, 此時需要用 intValue() /longValue()/數值類型的取值方法才能取到值;
- 同理 如果字段本身不是 int 整數型, 那么asInt() 會將獲取的結果嘗試轉化為 int 然后返回, 而 intValue() 會返回空null;

4. 關於其他類型的獲取值,同理: 如 longValue() 和 asLong() , asDouble() 和doubleValue();
需要補充一點, 如果字段在node中不存在, 則會報錯空指針, 因為 他會是先獲取,然后將結果轉換為text 但是 在前面一步 get("")的結果已經為空;
差異在於, 沒有值的 字段, 起碼key 是有的,此時會處理value
