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,后面调用会报错