fasterxml 해석 json 편
                                            
 39212 단어  자바
                    
github demo:https://github.com/FasterXML/jackson-databind
2
maven 의존:
		 <dependency.version.jackson>2.8.8dependency.version.jackson>
        
        <dependency>
            <groupId>com.fasterxml.jackson.coregroupId>
            <artifactId>jackson-coreartifactId>
            <version>${dependency.version.jackson}version>
        dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.coregroupId>
            <artifactId>jackson-databindartifactId>
            <version>${dependency.version.jackson}version>
        dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.coregroupId>
            <artifactId>jackson-annotationsartifactId>
            <version>${dependency.version.jackson}version>
        dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.datatypegroupId>
            <artifactId>jackson-datatype-jsr310artifactId>
            <version>${dependency.version.jackson}version>
        dependency>
		
		<dependency>
            <groupId>commons-beanutilsgroupId>
            <artifactId>commons-beanutilsartifactId>
            <version>1.7.0version>
        dependency>
    
  JacksonUtil.java  public class JacksonUtil {
    private static final Logger LOGGER = LoggerFactory.getLogger(JacksonUtil.class);
    private static final ObjectMapper objectMapper = new ObjectMapper();
    static {
        /*
         *   false:        ( :true        json   )
         *    ,              Java/C++    ( :/* //    )
         *   :   json            (   ),       
         */
        objectMapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
        /*
         *   false:           
    ,               (      ,   js   )
         *   :   json            (   ),       
         */
        objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
        /*
         *   false:               
         *    ,                      ( :       ,   '\'')
         *   :           ,   JSON   
         */
        objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
        /*
         *   :  false_            
         *    ,                   ( :ASCII<32,   tab    )
         *   :  false(  ) ,        ; true ,        
         */
        objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
        /*
         *              ,  :false,    
         */
        objectMapper.configure(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true);
        /**
         *        
         */
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        objectMapper.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true);
        /**
         *   null
         */
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        objectMapper.setLocale(Locale.CHINA);
        objectMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, false);
        
        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false);
        //  locadatetime   yyyy-MM-dd HH:mm:ss  
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        javaTimeModule.addSerializer(LocalDateTime.class,
                new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        objectMapper.registerModule(javaTimeModule);
    }
    /**
     *    JSON
     *
     * @param object
     *              
     * @return String
     */
    public static String toJSONString(Object object) {
        String json = "";
        if (null == object) {
            return json;
        }
        try {
            json = objectMapper.writeValueAsString(object);
        } catch (IOException e) {
            LOGGER.error("Java   JSON   !", e);
            e.printStackTrace();
        }
        return json;
    }
    /**
     *    JSON
     *
     * @param object
     *              
     * @param pattern
     *                     ,   "yyyy-MM-dd HH:mm:ss"
     * @return String
     */
    public static String toJSONString(Object object, String pattern) {
        String json = "";
        if (null == object) {
            return json;
        }
        ObjectMapper mapper = objectMapper;
        try {
            DateFormat dateFormat = new SimpleDateFormat(pattern);
            mapper = mapper.setDateFormat(dateFormat);
            json = mapper.writeValueAsString(object);
        } catch (IOException e) {
            LOGGER.error("Java   JSON   !", e);
            e.printStackTrace();
        }
        return json;
    }
    /**
     *  json      java  
     * 
     * @param json
     *            json   
     * @param typeReference
     *               java    
     * @param 
     * @return
     */ 
    public static <T> T jsonToBean(String json, TypeReference typeReference) {
        try {
            return objectMapper.readValue(json, typeReference);
        } catch (Exception e) {
            LOGGER.error("jsonToBeanByTypeReference", e);
            e.printStackTrace();
        }
        return null;
    }
    /**
     * map  JavaBean
     */
    public static <T> T map2bean(Map map, Class<T> clazz) {
        return objectMapper.convertValue(map, clazz);
    }
}
  3 사용
1 매 핑 엔 터 티
jsonToBean:
        List<JsonEntity> jsonEntityList = JacksonUtil.jsonToBean(message, new TypeReference<List<JsonEntity>>(){});
        
  메모: enity 는 List 로 정의 하지 마 세 요.
2 직접 읽 기
예시:
    public List<UserEventEntity> parse(String message) throws IOException{
        List<UserEventEntity> list = new ArrayList<>();
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = objectMapper.readTree(message);
        boolean active = jsonNode.get("Hadoop:service=NameNode,name=FSNamesystem").get("tag.HAState").textValue().equals("active");
        if(active){
            JsonNode innerNode = objectMapper.readTree(jsonNode.get("Hadoop:service=NameNode,name=FSNamesystemState").get("TopUserOpCounts").textValue());
            /**
             * topUserOpCounts   :
             * topUserOpCounts (string) : v (string)   String   v  : ( innerNode)
             *
             *     {
             * 	    "timestamp": "2019-06-25T16:57:11+0800",
             * 	    "windows": [{
             * 		    "windowLenMs": 60000,
             * 		    "ops": [{
             * 			    "opType": "listStatus",
             * 			    "topUsers": [{
             * 					"user": "voyager",
             * 					"count": 82
             *                },
             *                {
             * 					"user": "wave_bi",
             * 					"count": 1
             *                }
             * 			    ],
             * 			    "totalCount": 83
             * 		    }]
             * 	     }]
             *      }
             *
             *       ,  set entity     :
             *     timestamp :    timestamp   xxx
             *     opType    :    opType
             *     opTotalSum:  totalCount    topUsers   ,  user        
             *     userName  :   user
             *     opSum     :   count
             *     windowLenMs:    user 
             *
             *       ,      entity,  user = all ,     opTotalSum
             */
            String timestamp = innerNode.get("timestamp").textValue();
            innerNode.get("windows").forEach(e-> {
                long windowLenMs = e.get("windowLenMs").longValue();
                e.get("ops").forEach(f->{
                    String opType = f.get("opType").textValue();
                    long totalCount = f.get("totalCount").longValue();
                    UserEventEntity a = new UserEventEntity();
                    a.setUserName("all"); //        
                    a.setOpTotalSum(totalCount);
                    a.setOpSum(totalCount);
                    a.setOpType(opType);
                    a.setWindowLenMs(windowLenMs);
                    a.setTimestamp(timestamp);
                    list.add(a);
                    f.get("topUsers").forEach(g->{
                        String user = g.get("user").textValue();
                        long count = g.get("count").longValue();
                        UserEventEntity u = new UserEventEntity();
                        u.setTimestamp(timestamp);
                        u.setWindowLenMs(windowLenMs);
                        u.setOpType(opType);
                        u.setUserName(user);
                        u.setOpSum(count);
                        u.setOpTotalSum(totalCount);
                        list.add(u);
                    });
                });
            });
        }
        return list;
    }
                이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.