jackson基础

一、介绍

    使用jaskson需要三个核心包:jackson-annotations    jackson-core    jackson-databind

    代码中使用的自定义javabena:

public class User {
	private String username;
	private String password;
	private int age;
	private double salary;
	
	public User() {
		super();
	}
	
	public User(String username, String password, int age, double salary) {
		super();
		this.username = username;
		this.password = password;
		this.age = age;
		this.salary = salary;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public double getSalary() {
		return salary;
	}

	public void setSalary(double salary) {
		this.salary = salary;
	}

	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password + ", age=" + age + ", salary=" + salary
				+ "]";
	}
}

二、将javabean转为json

public void jacksonTest01() throws IOException {
    User user1 = new User("admin","123456",25,12.345);
    User user2 = new User("trans","trans",30,1.01);
    ObjectMapper objectMapper = new ObjectMapper();
    JsonGenerator jsonGenerator = objectMapper.getJsonFactory().createGenerator(System.out,JsonEncoding.UTF8);
    //writeObject可以转换java对象,当然不仅仅是单纯的javabean,还有map,array等
    jsonGenerator.writeObject(user1);
    //writeValue具有和writeObject相同的功能
    objectMapper.writeValue(System.out, user2);
}

输出结果:

{"username":"admin","password":"123456","age":25,"salary":12.345}{"username":"trans","password":"trans","age":30,"salary":1.01}

三、将map转换为json

public void jacksonTest02() throws IOException{
    Map<String,Object> map = new HashMap<String,Object>();
    map.put("username","lwb");
    map.put("password","admin");
    map.put("age",213);
    ObjectMapper objectMapper = new ObjectMapper();
    JsonGenerator jsonGenerator = objectMapper.getJsonFactory().createGenerator(System.out, JsonEncoding.UTF8);
    jsonGenerator.writeObject(map);
}

输出结果:

{"password":"admin","age":213,"username":"lwb"}

四、将List转化为json

public void jacksonTest03() throws IOException{
	List<Map<String,Object>> arrayList = new ArrayList<Map<String,Object>>();
	Map<String,Object> map = new HashMap<String,Object>();
	Map<String,Object> map1 = new HashMap<String,Object>();
	map.put("username","lwb");
	map.put("password","admin");
	map.put("age",213);
	map1.put("username","lwb");
	map1.put("password","admin");
	map1.put("age",213);
	arrayList.add(map);
	arrayList.add(map1);
	ObjectMapper objectMapper = new ObjectMapper();
	JsonGenerator jsonGenerator = objectMapper.getJsonFactory().createGenerator(System.out, JsonEncoding.UTF8);
	jsonGenerator.writeObject(arrayList);
}

输出结果:

[{"password":"admin","age":213,"username":"lwb"},{"password":"admin","age":213,"username":"lwb"}]

五、jackson的api练习

public void jacksonTest04() throws IOException{
	String str = "hello world jackson!";
	ObjectMapper objectMapper = new ObjectMapper();
	JsonGenerator jsonGenerator = objectMapper.getJsonFactory().createGenerator(System.out,JsonEncoding.UTF8);
	sonGenerator.writeBoolean(true);
	jsonGenerator.writeNumber(344);
	jsonGenerator.writeBoolean(true);
        //null
        jsonGenerator.writeNull();
        //float
        jsonGenerator.writeNumber(2.2f);
        //char
        jsonGenerator.writeRaw("c");
        //String
        jsonGenerator.writeRaw(str, 5, 10);
        //String
        jsonGenerator.writeRawValue(str, 5, 5);
        //String
        jsonGenerator.writeString(str);
        jsonGenerator.writeTree(JsonNodeFactory.instance.pojoNode(str));
        jsonGenerator.flush();
        System.out.println();
        
        //在没有bean的情况之下,也可以按照自己想要的格式输出
        String[] arr = {"1","波波"};
        jsonGenerator.writeStartObject();
        jsonGenerator.writeObjectFieldStart("user");
        jsonGenerator.writeStringField("username","lwb");
        jsonGenerator.writeNumberField("age", 23);
        jsonGenerator.writeObjectField("info", arr);
        jsonGenerator.writeEndObject();
        jsonGenerator.writeEndObject();
        jsonGenerator.flush();
        jsonGenerator.close();
	}
输出结果:
true 344 true null 2.2c world jac  worl "hello world jackson!" "hello world jackson!"
 {"user":{"username":"lwb","age":23,"info":["1","波波"]}}

六、将JSON字符串写入到文件中

public void jacksonTest06() throws IOException{
	User user = new User("admin","123456",25,12.345);
	ObjectMapper objectMapper = new ObjectMapper();
	//但是对于复杂的数据类型,Jackson Generator必须从ObjectMapper.getJsonFactory()的JsonFactory中创建,否则会报一下错误:
	//JsonFactory jsonFactory = new JsonFactory();
	//JsonGenerator jsonGenerator = jsonFactory.createGenerator(new File("C:/output.json"), JsonEncoding.UTF8);
	OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("C:/output.json")));
	JsonGenerator jsonGenerator = objectMapper.getJsonFactory().createJsonGenerator(out, JsonEncoding.UTF8);
	jsonGenerator.writeObject(user);
	out.flush();
	jsonGenerator.flush();
	out.close();
	jsonGenerator.close();
}

七、得到JSON字符串

public void jacksonTest07() throws JsonProcessingException {
    User user = new User("admin","123456",25,12.345);
    ObjectMapper objectMapper = new ObjectMapper();
    String userStr = objectMapper.writeValueAsString(user);
    System.out.println(userStr);
}

八、将JSON字符串转化为java对象

public void jacksonTest08() throws Exception {
    String json = "{\"_index\":\"hw_alarm_20180613\",\"_type\":\"system\",\"_id\":\"AWP2qOxxzJrjbyAxqXXE\",\"_version\":1,\"_score\":1,\"_source\":{\"@version\":\"1\",\"@timestamp\":\"2018-06-13T01:00:55.203Z\",\"path\":\"/export/home/linkage/I2jmsReceiver/alarmdata/SICHUAN6_AlarmType_20180613.txt\",\"host\":\"znwg-kfscswg2\",\"type\":\"system\",\"CLEARANCETIMESTAMP\":\"2018-06-1309:00:43\",\"SEND_TIME\":\"2018-06-1309:00:54\",\"SUBNETWORK\":\"绵阳市县华为OTN80*10G01\",\"EQUIPMENTNAME\":\"202-38-绵阳236局\",\"ALARMTEXT\":\"aliasNameList#NativeEMSName=202-38-绵阳236局,X733_SpecificProblems#(1)支持并激活复用结构的自动配置时,如果特定适配功能不支持实收MSI的无效值时声明MSIM缺陷;(2)不支持或未激活复用结构的自动配置时,如果实收MSI不等于应收MSI时声明MSIM缺陷。,additionalText#,serviceAffecting#SERVICE_AFFECTING,sourceTime#2018-06-13T01:00:43.000Z,X733_AdditionalInformation#AlarmSerialNo=635060890;StandardAlarmCode=C9999,X733_CorrelatedNotificationList#,acknowledgeIndication#UNACKNOWLEDGED,objectType#FTP,probableCause#probableCause=UNIDENTIFIED,perceivedSeverity#MINOR,osTime#2018-06-13T01:00:53.000Z,layerRate#LR_OCH_Data_Unit_2,nativeProbableCause#OPU2_MSIM,objectName#MD=Huawei/U2000;ME=3156449;FTP=/rack=1/shelf=3/slot=5/domain=wdm/port=52,rootCauseAlarmIndication#false,notificationId#5617885,X733_EventType#communicationsAlarm,isClearable#true,BOARDNAME#52ND2\",\"ALARMORIGIN\":\"EMS=SICHUAN6\",\"ADDITIONALTEXT\":\"EMS=SICHUAN6;MD=Huawei/U2000;ME=3156449;FTP=/rack=1/shelf=3/slot=5/domain=wdm/port=52\",\"PERCEIVEDSEVERITY\":\"3\",\"REGTYPE\":\"绵阳SCTHWDWDM\",\"EVENTTIME\":\"2018-06-1309:00:53\",\"SPECIALTY\":\"TRA\",\"NECLASS\":\"SCTHWDWDM\",\"CLEARANCEREPORTFLAG\":\"1\",\"isClearable\":\"1\",\"ALARMNAME\":\"OPU2_MSIM\",\"LOCATIONINFO\":\"EMS=SICHUAN6;MD=Huawei/U2000;ME=3156449;FTP=/rack=1/shelf=3/slot=5/domain=wdm/port=52\",\"SERIAL\":\"635060890\",\"REPAIRACTIONADVICE\":\"(1)支持并激活复用结构的自动配置时,如果特定适配功能不支持实收MSI的无效值时声明MSIM缺陷;(2)不支持或未激活复用结构的自动配置时,如果实收MSI不等于应收MSI时声明MSIM缺陷。\",\"IPADDRESS\":\"133.37.22.107\",\"ALARMREASON\":\"OPU2复用结构标识符失配\",\"EQUIPMENTNAME_ALIAS\":\"202-38-绵阳236局\",\"REGION\":\"绵阳\"}}";
    ObjectMapper objectMapper = new ObjectMapper();
    Map<String,Object> map = objectMapper.readValue(json, Map.class);
    Set<String> set = map.keySet();
    for (String string : set) {
	System.out.println(map.get(string));
	if(map.get(string) instanceof Map) {
	Map resource = (Map)map.get(string);
        Set<String> keySet = resource.keySet();
	for (String object : keySet) {
	    System.out.println(resource.get(object));
	}
	    }
	}
}

九、将xml转换为javabena

     需要用到额外的包:jackson-dataformat-xml    jackson-module-jaxb-annotations
public void jacksonTest09() throws Exception {
    //扩展实例知识(XStream的内容,可以不用管)
    User user = new User("admin","123456",25,12.345);
    XStream xStream = new XStream();
    xStream.autodetectAnnotations(true);
    xStream.alias("user",User.class);//重新命名类
    // xStream.aliasField("name",User.class,"username");//为类的字段重新命名
    String xmlStr = xStream.toXML(user);
    System.out.println(xmlStr);
		
    /////////////////////////////////
    //将javabean转换为xml
    XmlMapper xm = new XmlMapper();	
		
    //将xml 转换为javabean--> user
    XmlMapper xml = new XmlMapper();
    User user2 = xml.readValue(xmlStr, User.class);
    System.out.println(user2);
    ObjectMapper objectMapper = new ObjectMapper();
		
    //转换为Map
    Map map = xml.readValue(xmlStr, Map.class);
    System.out.println(map);
		
    //转换复杂的xml
    String str = "<root><data><msgBody><accessCode>接入号(20180425)</accessCode><cirLevel>钻</cirLevel><portType>28</portType><orderCode>20180426111111111</orderCode><cirName>测试电路</cirName><localnet>成都</localnet><resOperatlon>1</resOperatlon><newInfoList><newInfo><aPortId>EMS=SICHUAN6;MD=Huawei/U2000;ME=3148726;PTP=/rack=1/shelf=0/slot=20/domain=wdm/port=4;CTP=/odu0=1</aPortId><aPortSdhctp>VC4:1-VC12(1-1-1)</aPortSdhctp><aVcBreak>1</aVcBreak><zPortId>EMS=SICHUAN6;MD=Huawei/U2000;ME=3148003;PTP=/rack=1/shelf=0/slot=33/domain=wdm/port=8;CTP=/odu0=1</zPortId><zPortSdhctp>VC4:1-VC12(1-1-1)</zPortSdhctp><zVcBreak>1</zVcBreak><rate>1GE</rate></newInfo><newInfo><aPortId>EMS=SICHUAN6;MD=Huawei/U2000;ME=3148726;PTP=/rack=1/shelf=0/slot=20/domain=wdm/port=4;CTP=/odu0=1</aPortId><aPortSdhctp>VC4:1-VC12(1-1-1)</aPortSdhctp><aVcBreak>1</aVcBreak><zPortId>EMS=SICHUAN6;MD=Huawei/U2000;ME=3148003;PTP=/rack=1/shelf=0/slot=33/domain=wdm/port=8;CTP=/odu0=1</zPortId><zPortSdhctp>VC4:1-VC12(1-1-1)</zPortSdhctp><zVcBreak>1</zVcBreak><rate>1GE</rate></newInfo></newInfoList><oldInfoList><newInfo><aPortId>EMS=SICHUAN6;MD=Huawei/U2000;ME=3147312;PTP=/rack=1/shelf=0/slot=11/domain=sdh/port=1;CTP=/sts12c_vc4_4c=13</aPortId><zPortId>EMS=SICHUAN6;MD=Huawei/U2000;ME=3148656;PTP=/rack=1/shelf=0/slot=8/domain=wdm/port=1;CTP=/och=1</zPortId><rate>1GE</rate></newInfo><newInfo><aPortId>EMS=SICHUAN6;MD=Huawei/U2000;ME=3147312;PTP=/rack=1/shelf=0/slot=11/domain=sdh/port=1;CTP=/sts12c_vc4_4c=13</aPortId><zPortId>EMS=SICHUAN6;MD=Huawei/U2000;ME=3148656;PTP=/rack=1/shelf=0/slot=8/domain=wdm/port=1;CTP=/och=1</zPortId><rate>1GE</rate></newInfo></oldInfoList></msgBody></data></root>";
    Map map2 = xml.readValue(str, Map.class);
    System.out.println(map2);
		
    //直接转换为object呢?
    Object map3 = xml.readValue(str, Object.class);
    System.out.println(map3);
}



















猜你喜欢

转载自blog.csdn.net/u013441805/article/details/80766398