初识jackson

来源:互联网 发布:手机屏幕分享软件 编辑:程序博客网 时间:2024/05/22 00:35

今天刚刚接触jackson,刚刚开始不知道是什么,看完后才发觉是个好东西。现在Android通信大部分都是用JSON来与服务器通信。jackson是一种可以让你很方便的将Java对象转换成JSON的jar包。

JsonGenerator对象。想要构造它需要使用ObjectMapper。

jsonGenerator = objectMapper.getJsonFactory().createJsonGenerator(System.out, JsonEncoding.UTF8);

用ObjectMapper获得JsonFactory()然后创建JsonGenerator需要两个参数,第一个参数是一个输出流,用于输出转换过后的内容,也可以接受一个File,用来将转换的结果直接写到文档中。第二个参数是编码格式。

对于ObjectMapper对象可以直接进行默认的初始化。

package json.change;import java.io.IOException;import java.io.StringWriter;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import java.util.Set;import javax.print.attribute.HashAttributeSet;import org.codehaus.jackson.JsonEncoding;import org.codehaus.jackson.JsonGenerationException;import org.codehaus.jackson.JsonGenerator;import org.codehaus.jackson.JsonParseException;import org.codehaus.jackson.JsonProcessingException;import org.codehaus.jackson.map.JsonMappingException;import org.codehaus.jackson.map.ObjectMapper;import org.codehaus.jackson.node.JsonNodeFactory;import org.codehaus.jackson.xml.XmlMapper;import org.junit.After;import org.junit.Before;import org.junit.Test;public class JackJsonTest {/** * 创建JsonGenerator对象,用于将java对象转化为JSON */private JsonGenerator jsonGenerator = null;/** * 1.用于创建JsonGenerator * 2.可以用于转化json */private ObjectMapper objectMapper;private AccountBean accountBean;@Beforepublic void init(){objectMapper = new ObjectMapper();accountBean = new AccountBean();accountBean.setId(1);accountBean.setAdress("1234");accountBean.setEmail("@qq.com");accountBean.setName("tang");try {jsonGenerator = objectMapper.getJsonFactory().createJsonGenerator(System.out, JsonEncoding.UTF8);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Afterpublic void destroy() throws IOException{if(jsonGenerator != null){jsonGenerator.flush();}if(!(jsonGenerator.isClosed())){jsonGenerator.close();}jsonGenerator = null;objectMapper = null;accountBean = null;System.gc();}@Testpublic void write(){try {jsonGenerator.writeObject(accountBean);} catch (JsonProcessingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println();System.out.println("ObjectMapper");try {objectMapper.writeValue(System.out, accountBean);} catch (JsonGenerationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (JsonMappingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Testpublic void writeMap() throws JsonProcessingException, IOException{Map<String, Object> map = new HashMap<String, Object>();map.put("name", accountBean.getName());map.put("account", accountBean);accountBean = new AccountBean();accountBean.setAdress("123");accountBean.setEmail("615853302@qq.com");map.put("account2", accountBean);jsonGenerator.writeObject(map);System.out.println();objectMapper.writeValue(System.out, map);}@Testpublic void writeList() throws JsonProcessingException, IOException{ArrayList<AccountBean> list = new ArrayList<>();list.add(accountBean);accountBean = new AccountBean();accountBean.setAdress("home");accountBean.setEmail("615853302@qq.com");accountBean.setId(2);accountBean.setName("tang");list.add(accountBean);System.out.println("jsonGenerator");jsonGenerator.writeObject(list);System.out.println();System.out.println("objectMapper");System.out.println("1#" + objectMapper.writeValueAsString(list));System.out.println();System.out.print("2#");objectMapper.writeValue(System.out, list);}@Testpublic void writeOtherJson() throws JsonGenerationException, IOException{        String[] arr = { "a", "b", "c" };        System.out.println("jsonGenerator");        String str = "hello world jackson!";        jsonGenerator.writeBinary(str.getBytes());        jsonGenerator.writeBoolean(true);        jsonGenerator.writeNull();        jsonGenerator.writeNumber(2.2f);        jsonGenerator.writeRaw("c");        jsonGenerator.writeRaw(str, 5, 10);        jsonGenerator.writeRawValue(str, 5, 5);        jsonGenerator.writeString(str);        jsonGenerator.writeTree(JsonNodeFactory.instance.POJONode(str));        System.out.println();                jsonGenerator.writeStartObject();//{        jsonGenerator.writeObjectFieldStart("user");//user:{        jsonGenerator.writeStringField("name", "jackson");//name:jackson        jsonGenerator.writeBooleanField("sex", true);//sex:true        jsonGenerator.writeNumberField("age", 22);//age:22        jsonGenerator.writeEndObject();//}        jsonGenerator.writeArrayFieldStart("infos");//infos:[        jsonGenerator.writeNumber(22);//22        jsonGenerator.writeString("this is array");//this is array        jsonGenerator.writeEndArray();//]        jsonGenerator.writeEndObject();//}        AccountBean bean = new AccountBean();        bean.setAdress("address");        bean.setEmail("email");        bean.setId(1);        bean.setName("haha");        //complex Object        jsonGenerator.writeStartObject();//{        jsonGenerator.writeObjectField("user", bean);//user:{bean}        jsonGenerator.writeObjectField("infos", arr);//infos:[array]        jsonGenerator.writeEndObject();}/** * JSON装换为java对象 */@Testpublic void readJson2Entity() {    String json = "{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}";    try {        AccountBean acc = objectMapper.readValue(json, AccountBean.class);        System.out.println(acc.getName());        System.out.println(acc);    } catch (JsonParseException e) {        e.printStackTrace();    } catch (JsonMappingException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }}/** * JSON转换为list对象 * objectMapper.readValue(json, List.class) * 无法知道具体的类型所以不能转换成AccountBean类型 */@Testpublic void readJson2List() {    String json = "[{\"address\": \"address2\",\"name\":\"haha2\",\"id\":2,\"email\":\"email2\"},"+                "{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}]";    try {        List<LinkedHashMap<String, Object>> list = objectMapper.readValue(json, List.class);        System.out.println(list.size());        for (int i = 0; i < list.size(); i++) {            Map<String, Object> map = list.get(i);            Set<String> set = map.keySet();            for (Iterator<String> it = set.iterator();it.hasNext();) {                String key = it.next();                System.out.println(key + ":" + map.get(key));            }        }    } catch (JsonParseException e) {        e.printStackTrace();    } catch (JsonMappingException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }}/** * JSON转换为具体的类型数组 */@Testpublic void readJson2Array() {    String json = "[{\"address\": \"address2\",\"name\":\"haha2\",\"id\":2,\"email\":\"email2\"},"+            "{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}]";    try {        AccountBean[] arr = objectMapper.readValue(json, AccountBean[].class);        System.out.println(arr.length);        for (int i = 0; i < arr.length; i++) {            System.out.println(arr[i]);        }    } catch (JsonParseException e) {        e.printStackTrace();    } catch (JsonMappingException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }}/** * JSON转换为Map */@Testpublic void readJson2Map() {    String json = "{\"success\":true,\"A\":{\"address\": \"address2\",\"name\":\"haha2\",\"id\":2,\"email\":\"email2\"},"+                "\"B\":{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}}";    try {        Map<String, Map<String, Object>> maps = objectMapper.readValue(json, Map.class);        System.out.println(maps.size());        Set<String> key = maps.keySet();        Iterator<String> iter = key.iterator();        while (iter.hasNext()) {            String field = iter.next();            System.out.println(field + ":" + maps.get(field));        }    } catch (JsonParseException e) {        e.printStackTrace();    } catch (JsonMappingException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }}/** * 转换XML */@Testpublic void writeObject2Xml() {    //stax2-api-3.0.2.jar    System.out.println("XmlMapper");    XmlMapper xml = new XmlMapper();    try {        //javaBean转换成xml        //xml.writeValue(System.out, bean);        StringWriter sw = new StringWriter();        xml.writeValue(sw, accountBean);        System.out.println(sw.toString());        //List转换成xml        List<AccountBean> list = new ArrayList<AccountBean>();        list.add(accountBean);        list.add(accountBean);        System.out.println(xml.writeValueAsString(list));        //Map转换xml文档        Map<String, AccountBean> map = new HashMap<String, AccountBean>();        map.put("A", accountBean);        map.put("B", accountBean);        System.out.println(xml.writeValueAsString(map));    } catch (JsonGenerationException e) {        e.printStackTrace();    } catch (JsonMappingException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }}}


0 0
原创粉丝点击