用jackson实现json和字符串直接的转换


Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。

maven

 
    
	
	    com.fasterxml.jackson.core
	    jackson-core
	    2.6.2
	
	
	
	    com.fasterxml.jackson.dataformat
	    jackson-dataformat-xml
	    2.7.6
		
	    
  


需要转换的json数据

{
    "username": "zhangsan",
    "性别": "男",
    "company": {
        "companyName": "中华",
        "address": "北京"
    },
    "cars": [
        "奔驰",
        "宝马"
    ],
    "logList": [
        {
            "id": 123,
            "name": "abc"
        },
        {
            "id": 234,
            "name": "efff"
        }
    ]
}



Java调用

package test;
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
 * 日志类
 * @author Administrator
 *
 */
class Log{
	private int id;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "log [id=" + id + ", name=" + name + "]";
	}
	
}
public class JacksonTest {

	public static void main(String[] args) throws Exception {
		String json = "{\"username\":\"zhangsan\",\"性别\":\"男\",\"company\":{\"companyName\":\"中华\",\"address\":\"北京\"},\"cars\":[\"奔驰\",\"宝马\"],\"logList\":[{\"id\":123,\"name\":\"abc\"},{\"id\":234,\"name\":\"efff\"}]}";  
		//System.out.println(json);
		ObjectMapper mapper = new ObjectMapper();
		JsonNode rootNode = mapper.readTree(json);
		
		JsonNode usernameNode = rootNode.path("username");
		String username = mapper.writeValueAsString(usernameNode);
		System.out.println("==username==");
		System.out.println(username);
		
		//转换成类型,Map类型,同样Integer,String,List,也可以同样处理
		JsonNode companyNode = rootNode.path("company");
		String company = mapper.writeValueAsString(companyNode);		
		Map companyMap = mapper.readValue(company, Map.class);
		System.out.println("==company==");
		System.out.println(companyMap);
		
		//转换成List,类型
		JsonNode logListNode = rootNode.path("logList");
		String logJson = mapper.writeValueAsString(logListNode);
		JavaType logType = mapper.getTypeFactory().constructParametricType(List.class, Log.class);
		List logList = mapper.readValue(logJson, logType);
		System.out.println("==logList==");
		System.out.println(logList);		

	}

}


打印出结果

==username==
"zhangsan"
==company==
{companyName=中华, address=北京}
==logList==
[log [id=123, name=abc], log [id=234, name=efff]]



你可能感兴趣的:(用jackson实现json和字符串直接的转换)