##Jackson轉換Json##html
###依賴的jar包###java
jackson-annotations-2.6.0.jarjson
jackson-core-2.6.3.jar數組
jackson-databind-2.6.3.jarapp
注意.net
Jackson解析嵌套類時,內部類必須聲明爲staticcode
public class Outer { static class Inner { public int getX() { return 5; } } 參見:http://cowtowncoder.com/blog/archives/2010/08/entry_411.html
###ObjectMapper和JsonGenerator###htm
ObjectMapper對象
ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); //還可用註釋標註在實體類上 @JsonIgnoreProperties({"property1", "property2"})
JsonGeneratorblog
輸出前須要flush(),使用後須要close
jsonGenerator = objectMapper.getFactory().createGenerator(System.out, JsonEncoding.UTF8); if (jsonGenerator != null) { jsonGenerator.flush(); } if (!jsonGenerator.isClosed()) { jsonGenerator.close(); }
POJO
AccountBean bean = new AccountBean(); bean.setAddress("china-Guangzhou"); bean.setEmail("hoojo_@126.com"); bean.setId(1); bean.setName("hoojo");
###POJO轉換成Json###
ObjectMapper
//writeObject能夠轉換java對象,eg:JavaBean/Map/List/Array等 jsonGenerator.writeObject(bean);
JsonGenerator
objectMapper.writeValue(System.out, bean); 輸出:{"id":1,"name":"hoojo","email":"hoojo_@126.com","address":"china-Guangzhou","birthday":null}
###Json轉換成POJO###
String json = "{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}"; AccountBean accountBean = objectMapper.readValue(json, AccountBean.class);
###List轉換成Json###
List<AccountBean> list = new ArrayList<>(); list.add(bean); bean = new AccountBean(); bean.setId(2); bean.setAddress("address2"); bean.setEmail("email2"); bean.setName("haha2"); list.add(bean);
ObjectMapper
//用objectMapper直接返回list轉換成的JSON字符串 objectMapper.writeValueAsString(list) //或 //objectMapper list轉換成JSON字符串 objectMapper.writeValue(System.out, list);
jsonGenerator
jsonGenerator.writeObject(list); [{"id":1,"name":"hoojo","email":"hoojo_@126.com","address":"china-Guangzhou","birthday":null},{"id":2,"name":"haha2","email":"email2","address":"address2","birthday":null}]
###Json轉換成數組###
String json = "[{\"address\": \"address2\",\"name\":\"haha2\",\"id\":2,\"email\":\"email2\"}," +"{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}]"; AccountBean[] accountBeen = objectMapper.readValue(json, AccountBean[].class);
###Json轉換成List###
String json = "[{\"address\": \"address2\",\"name\":\"haha2\",\"id\":2,\"email\":\"email2\"}," +"{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}]"; JavaType javaType = objectMapper.getTypeFactory().constructParametrizedType(ArrayList.class, List.class, AccountBean.class); List<AccountBean> list = objectMapper.readValue(json, javaType);
###Json轉換成List<Map>###
(全部的json對象都會直接解析成LinkedHashMap)
String json = "[{\"address\": \"address2\",\"name\":\"haha2\",\"id\":2,\"email\":\"email2\"}," + "{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}]"; List<HashMap<String,Object>> list = objectMapper.readValue(json, List.class); for(int i=0; i< list.size(); i++){ HashMap<String, Object> hashMap = list.get(i); Iterator<Map.Entry<String, Object>> entryIterator = hashMap.entrySet().iterator(); while(entryIterator.hasNext()){ Map.Entry<String, Object> entry = entryIterator.next(); System.out.println(entry.getKey() +"="+ entry.getValue()); } }
###Map轉換成Json###
Map<String, Object> map = new HashMap<>(); map.put("name", bean.getName()); map.put("account", bean); bean = new AccountBean(); bean.setAddress("china-Beijin"); bean.setEmail("hoojo@qq.com"); map.put("account2", bean);
ObjectMapper
objectMapper.writeValue(System.out, map);
JsonGenerator
jsonGenerator.writeObject(map); {"account2":{"id":0,"name":null,"email":"hoojo@qq.com","address":"china-Beijin","birthday":null},"name":"hoojo","account":{"id":1,"name":"hoojo","email":"hoojo_@126.com","address":"china-Guangzhou","birthday":null}}
###Json轉換成Map###
String json = "{\"flag\":true,\"A\":{\"address\": \"address2\",\"name\":\"haha2\",\"id\":2,\"email\":\"email2\"}," +"\"B\":{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}}";
第一種:解析成String-POJO
Map<String, Object> maps = new ObjectMapper().readValue(json, Map.class); //第二個參數是Object Iterator<Map.Entry<String,Object>> entryIterator = maps.entrySet().iterator(); while(entryIterator.hasNext()){ Map.Entry<String, Object> entry = entryIterator.next(); System.out.println(entry.getKey() + "=" + entry.getValue()); }
第二種:解析成String-LinkedHashMap<String,Map<String,Object>>
String json = "{\"A\":{\"address\": \"address2\",\"name\":\"haha2\",\"id\":2,\"email\":\"email2\"}," +"\"B\":{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}}"; Map<String, Map<String,Object>> maps = new ObjectMapper().readValue(json, Map.class); Iterator<Map.Entry<String,Map<String,Object>>> entryIterator = maps.entrySet().iterator(); while(entryIterator.hasNext()){ Map.Entry<String, Map<String,Object>> entry = entryIterator.next(); System.out.println(entry.getKey()+"*"); Map<String, Object> map = entry.getValue(); Iterator<Map.Entry<String,Object>> iterator = map.entrySet().iterator(); while(iterator.hasNext()){ Map.Entry<String, Object> entry1 = iterator.next(); System.out.println(entry1.getKey() + "#" + entry1.getValue()); } }
第三種:解析成Map<String,Pojo>
String json = "{\"A\":{\"address\": \"address2\",\"name\":\"haha2\",\"id\":2,\"email\":\"email2\"}," +"\"B\":{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}}"; JavaType javaType = objectMapper.getTypeFactory().constructMapType(HashMap.class, String.class, AccountBean.class); Map<String,AccountBean> map = objectMapper.readValue(json, javaType); Iterator<Map.Entry<String, AccountBean>> entryIterator = map.entrySet().iterator(); while(entryIterator.hasNext()){ Map.Entry<String,AccountBean> entry = entryIterator.next(); System.out.println(entry.getKey() +"__"); System.out.println(entry.getValue().getAddress()); }
###複雜的json輸出###
String[] arr = {"a", "b", "c"}; String str = "hell oa <>&*< world jackson!\"address\": \"address2\",\"name\":\"haha2\""; //byte,null,boolean,number jsonGenerator.writeBinary(str.getBytes()); jsonGenerator.writeBoolean(true); jsonGenerator.writeNull(); jsonGenerator.writeNumber(2.2f); //String jsonGenerator.writeRawValue(str, 5, 5); jsonGenerator.writeRawValue(str); jsonGenerator.writeString(str);//先後有空格 // jsonGenerator.writeTree(JsonNodeFactory.instance.pojoNode(bean)); //先後沒有空格 jsonGenerator.writeRaw('c'); jsonGenerator.writeRaw(str); jsonGenerator.flush(); System.out.println(); //對象{"id":1,"name":"hoojo","email":"hoojo_@126.com","address":"china-Guangzhou","birthday":null} jsonGenerator.writeObject(bean); //對象多餘{"user":{"id":1,"name":"hoojo","email":"hoojo_@126.com","address":"china-Guangzhou","birthday":null},"info":["a","b","c"]} jsonGenerator.writeStartObject(); jsonGenerator.writeObjectField("user", bean); jsonGenerator.writeObjectField("info", arr); jsonGenerator.writeEndObject(); jsonGenerator.flush(); System.out.println(); //複雜對象 jsonGenerator.writeStartObject(); //{ jsonGenerator.writeObjectFieldStart("user");//user:{ jsonGenerator.writeFieldName("id");//id:1 jsonGenerator.writeNumber(1); jsonGenerator.writeFieldName("memo"); jsonGenerator.writeString("123344556677"); jsonGenerator.writeStringField("name","jackson");//name:jackson jsonGenerator.writeEndObject();//} //jsonGenerator.writeStartArray(); //[ jsonGenerator.writeArrayFieldStart("info");//info:[ jsonGenerator.writeString("a"); jsonGenerator.writeNumber(22);//22 jsonGenerator.writeBoolean(true); jsonGenerator.writeEndArray();//] jsonGenerator.writeEndObject();//} 輸出:(id前的zdef-863096486:暫時不知道怎麼解決) "aGVsbCBvYSA8PiYqJmx0IHdvcmxkIGphY2tzb24hImFkZHJlc3MiOiAiYWRkcmVzczIiLCJuYW1lIjoiaGFoYTIi" true null 2.2 oa <> hell oa <>&*< world jackson!"address": "address2","name":"haha2" "hell oa <>&*< world jackson!\"address\": \"address2\",\"name\":\"haha2\""chell oa <>&*< world jackson!"address": "address2","name":"haha2" {"id":1,"name":"hoojo","email":"hoojo_@126.com","address":"china-Guangzhou","birthday":null} {"user":{"id":1,"name":"hoojo","email":"hoojo_@126.com","address":"china-Guangzhou","birthday":null},"info":["a","b","c"]} {"user":{"id":1,"memo":"123344556677","name":"jackson"},"info":["a",22,true]}
###其餘###