Jackson轉換Json

##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 <>&*&lt 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 <>&*&lt world jackson!"address": "address2","name":"haha2" "hell oa <>&*&lt world jackson!\"address\": \"address2\",\"name\":\"haha2\""chell oa <>&*&lt 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]}

###其餘###

參考:http://blog.csdn.net/laixiaonian/article/details/8144920

相關文章
相關標籤/搜索