Jackson自定义反序列化

版权声明:转载请加链接 https://blog.csdn.net/y526089989/article/details/88871856
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;


public class ProductResultDeserializer  extends JsonDeserializer<JointOperationProductResult> {

	@Override
	public JointOperationProductResult deserialize(JsonParser jp, DeserializationContext ctxt)
			throws IOException, JsonProcessingException {
		 	JsonNode node = jp.getCodec().readTree(jp);  
		 	String code = node.get("code").asText();
		 	Integer total = node.get("total").asInt();
		 	JsonNode  listNode =node.path("list");
		 	
		 	List<JointOperationResultList> list=new ArrayList<JointOperationResultList>();
		 	
		 	System.out.println("本次List条数为"+listNode.size());
		 	
		 	for (int i = 0; i < listNode.size(); i++) {			 
		 		JointOperationResultList entity=new JointOperationResultList();
		 		entity.setRewrite(listNode.get(i).get("rewrite").asText());
		 		entity.setName(listNode.get(i).get("name").asText().replaceAll("'", "''"));
		 		entity.setItemno(listNode.get(i).get("itemno").asText());
		 		entity.setSales(listNode.get(i).get("sales").asText());
		 		entity.setKeywords(listNode.get(i).get("keywords").asText().replaceAll("'", "''"));
		 		String context=listNode.get(i).get("content").asText().replaceAll("'", "''");
		 		entity.setContent(context);
		 		entity.setCategory(listNode.get(i).get("category").asText().replaceAll("'", "''"));
		 		entity.setCategoryid(listNode.get(i).get("categoryid").asText());
		 		entity.setSize(listNode.get(i).get("size").asText());
		 		entity.setWeight(listNode.get(i).get("weight").asText());
		 		entity.setR_weight(listNode.get(i).get("r_weight").asText());
		 		entity.setColor(listNode.get(i).get("color").asText());
		 		entity.setImage(listNode.get(i).get("image").asText());
		 		entity.setCreate_time(listNode.get(i).get("create_time").asText());
		 		entity.setCategory_path(listNode.get(i).get("category_path").asText());
		 		entity.setMaterial(listNode.get(i).get("material").asText());
		 		entity.setPrice(listNode.get(i).get("price").asText());
		 		entity.setRmb_price(new BigDecimal(listNode.get(i).get("rmb_price").asText()));
		 		
		 		//images
		 		List<String> images=new ArrayList<String>();
		 		JsonNode  imagesNode =listNode.get(i).get("images");
		 		//System.out.println(imagesNode.size());
	 			if(imagesNode!=null&&imagesNode.size()>0)
	 			{
			 		for(int j = 0; j< imagesNode.size(); j++)
			 		{
			 			images.add(imagesNode.get(j).asText());
			 		}
	 			}
		 		entity.setImages(images);
		 		
		 		JsonNode  tagsNode =listNode.get(i).get("tags");
		 		
		 		if(tagsNode.size()>0)
		 		{
			 		Iterator<Entry<String, JsonNode>> it=tagsNode.fields();
			 		Map<String,JointOperationTag> tags=new HashMap<String,JointOperationTag>();
			 		while (it.hasNext()) {
			 			Entry<String, JsonNode> entry = it.next();
			 			JointOperationTag jot=new JointOperationTag();
			 			
			 			//name
			 			jot.setName(entry.getValue().get("name").asText());
			 			
			 			//son
			 			JsonNode sonNode=entry.getValue().get("son");
			 			List<String> sons=new ArrayList<String>();
			 			if(sonNode.size()>0)
			 			{
					 		for(int k = 0; k< sonNode.size();k++)
					 		{
					 			sons.add(sonNode.get(k).asText());
					 		}
			 			}
			 			jot.setSon(sons);
			 			tags.put(entry.getKey(),jot );
			 		}
			 		entity.setTags(tags);
		 		}
		 		
		 		
		 		
		 		
		 		list.add(entity);
		 	}
 
	        return new JointOperationProductResult(code,total,list);  
	}

}

调用:

public static JointOperationProductResult jsonToObjectForResult(String json) {
		JointOperationProductResult res = null;
		try {
			if (json == null) {
				return null;
			}
			if (json.isEmpty()) {
				return null;
			}
			JsonFactory jsonFactory = new MappingJsonFactory();
			JsonParser jsonParser = jsonFactory.createParser(json);
			ObjectMapper mapper = new ObjectMapper();
			mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
			SimpleModule module = new SimpleModule();
			module.addDeserializer(JointOperationProductResult.class, new ProductResultDeserializer());
			mapper.registerModule(module);
			res = mapper.readValue(jsonParser, JointOperationProductResult.class);

		} catch (Exception ex) {
			ex.printStackTrace();
			res = null;
		}
		return res;

	}

猜你喜欢

转载自blog.csdn.net/y526089989/article/details/88871856