jackson 복잡한 json 문제 해석

22781 단어 json
jackson 복잡한 json 문제 해석
jackson에서 흔히 볼 수 있는 json 생성과 해석 도구 패키지입니다. 복잡한 json 해석에 대한 문제점을 살펴보겠습니다.
  • 잭슨 소개
  • jackson 의존 패키지
  • jackson 해석 자바빈
  • Jackson 해석 범용 List
  • jackson 해석 복잡한 json
  • Jackson 소개
    잭슨은 일종의 JSON API이자 가장 유행하고 속도가 가장 빠른 JSON API이다.잭슨의 온라인 API 문서는http://wiki.fasterxml.com/JacksonInFiveMinutes구문을 사용합니다.잭슨의 소스 코드 관리:https://github.com/FasterXML/jackson. 잭슨은 두 가지 다른 JSON 해상도를 제공했다. ObjectMapper: JSON을 사용자 정의 자바 클래스로 해석하거나 잭슨이 지정한 트리 구조로 해석한다. (Tree 모델)잭슨 Json Parser: 매번 JSON 데이터 그룹을 분석하는 '풀(pull) 해상도잭슨도 두 가지 다른 JSON 생성기를 포함한다. ObjectMapper: 사용자 정의 자바 클래스나 잭슨이 지정한 트리 구조를 JSON 파일로 만든다.잭슨 JsonGenerator: 매번 한 그룹의 JSON 데이터만 생성합니다.
    jackson 의존 패키지
    잭슨은 코어 JAR 하나와 코어 JAR에 의존하는 두 개의 JAR을 포함한다. 잭슨 코어, 잭슨 앤노테이션, 잭슨 앤노테이션, 잭슨 앤노테이션.이 세 개의 JAR은 Maven 중앙 창고에서 다운로드한 다음 CLASSPATH에 놓을 수도 있고 Maven 설정으로 할 수도 있다.
    <dependency>  
          <groupId>com.fasterxml.jackson.coregroupId>  
          <artifactId>jackson-databindartifactId>  
          <version>${jackson-version}version>  
    dependency>  
    <dependency>  
          <groupId>com.fasterxml.jackson.coregroupId>  
          <artifactId>jackson-coreartifactId>  
          <version>${jackson-version}version>  
    dependency>  
    <dependency>  
          <groupId>com.fasterxml.jackson.coregroupId>  
          <artifactId>jackson-annotationsartifactId>  
          <version>${jackson-version}version>  
    dependency>  

    jackson 해석 javaBean
    ProductBean.java
    package cn.com.zckj;
    
    /**
     * 
     * @ClassName: ProductBean
     * @Description:    
     * @author deng
     * @date 2017 4 27    3:38:26
     */
    public class ProductBean {
    
        //     
        private int id;
        //     
        private String name;
        //   jiage
        private int price;
    
    
        public ProductBean() {
            super();
        }
    
        public ProductBean(int id, String name, int price) {
            super();
            this.id = id;
            this.name = name;
            this.price = price;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getPrice() {
            return price;
        }
    
        public void setPrice(int price) {
            this.price = price;
        }
    
        @Override
        public String toString() {
            return "   id:" + id + ",   :" + name + ",   :" + price ;
        }
    
    }
    

    해석은 다음과 같습니다.
    package cn.com.zckj;
    
    import java.io.File;
    import java.io.IOException;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    /**
     * 
    * @ClassName: Demo4 
    * @Description: TODO(              ) 
    * @author deng
    * @date 2018 4 17    11:38:13
     *Jackson      
     *
     */
    public class Demo4 {
    
        public static void main(String[] args) {
            //  -》 json
            //ProductBean productBean=new ProductBean(1, "aa", 222);
            ObjectMapper mapper = new ObjectMapper();
            try {
                mapper.writeValue(new File("data.txt"), productBean);
            } catch (IOException e) {
                e.printStackTrace();
            }
    
    
            //json - >   
            try {
                ProductBean productBean2  = mapper.readValue(new File("data.txt"), ProductBean.class);
                System.out.println(productBean2);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    Jackson 해석 List
    package cn.com.zckj;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import com.fasterxml.jackson.databind.JavaType;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    
    /**
     * 
    * @ClassName: Demo5 
    * @Description: TODO(              ) 
    * @author deng
    * @date 2018 4 18    10:51:23
    * 
    * jackson  list       
     */
    public class Demo5 {
    
        public static void main(String[] args) {
    
            ArrayList productBeans = new ArrayList();
            productBeans.add(new ProductBean(1, "a", 22));
            productBeans.add(new ProductBean(2, "b", 22));
            productBeans.add(new ProductBean(3, "c", 22));
    
            ObjectMapper mapper = new ObjectMapper();
    
            try {
                mapper.writeValue(new File("data.txt"), productBeans);
            } catch (IOException e) {
                e.printStackTrace();
            }
    
    
    
            //     ArrayList == javaType
            JavaType javaType = mapper.getTypeFactory().constructCollectionType(ArrayList.class, ProductBean.class);  
            try {
                List lst =  (List)mapper.readValue(new File("data.txt"), javaType);
                for(ProductBean productBean : lst){
                    System.out.println(productBean);
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            }  
    
    
            //     
            try {
                List lst = mapper.readValue(new File("data.txt"), ArrayList.class);
                for(ProductBean productBean : lst){
                    System.out.println(productBean);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    }
    

    jackson 복잡한 json 해석
    ResultBean.java
    package cn.com.zzkj;
    
    import java.util.ArrayList;
    
    
    /**
     * 
    * @ClassName: ResultBean 
    * @Description: TODO(              ) 
    * @author deng
    * @date 2018 4 19    6:29:18
     */
    public class ResultBean {
    
        private String code;
        private ArrayList data;
    
    
    
        public ResultBean() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        public ResultBean(String code, ArrayList data) {
            super();
            this.code = code;
            this.data = data;
        }
    
        public String getCode() {
            return code;
        }
    
        public void setCode(String code) {
            this.code = code;
        }
    
        public ArrayList getData() {
            return data;
        }
    
        public void setData(ArrayList data) {
            this.data = data;
        }
    
        @Override
        public String toString() {
            return "ResultBean [code=" + code + ", data=" + data + "]";
        }
    }
    

    해석 방식
    package cn.com.zzkj;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.ArrayList;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    public class Test {
        public static void main(String[] args) {
    
            ObjectMapper objectMapper = new ObjectMapper();
            ArrayList data = new ArrayList();
    
            data.add(new ProductBean(2, " ", 2));
            data.add(new ProductBean(2, " ", 2));
            data.add(new ProductBean(2, " ", 2));
            ResultBean resultBean =new ResultBean("11",data);
            try {
                objectMapper.writeValue(new File("aa.txt"), resultBean);
            } catch (IOException e) {
                e.printStackTrace();
            }
            //      1.  bean      json       。2.  bean         json         
            try {
                ResultBean resultBean2 = JackSonUtil.parse(ResultBean.class, new FileInputStream(new File("aa.txt")));
                ArrayList a = resultBean2.getData();
                for(ProductBean productBean : a){
                    System.out.println(productBean);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
    

    의지하다
    jackson-annotations-2.5.0.jar
    jackson-core-2.5.0.jar
    jackson-core-asl-1.9.11.jar
    jackson-databind-2.5.0.jar
    jackson-mapper-asl-1.9.11.jar
    stax2-api-3.1.1.jar

    jar 패키지 및 JackSonUtil 도구 클래스 JackSonUtil.java
    package cn.com.zzkj;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    import org.codehaus.jackson.JsonParseException;
    import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
    import org.codehaus.jackson.annotate.JsonMethod;
    import org.codehaus.jackson.map.DeserializationConfig;
    import org.codehaus.jackson.map.JsonMappingException;
    import org.codehaus.jackson.map.ObjectMapper;
    
    
    /**
     * 
     * @since 2014/10/25 18:33
     * @version 1.0       1.  bean      json       。2.  bean         json         
     * 
     */
    public class JackSonUtil {
        /**
         * @param clazz
         *                  bean    bean      Serializable  
         * @param is
         *            json    
         * @return       bean    : Djl p = JackSonUtil.parse(Djl.class, is);
         */
        public static  T parse(Class clazz, InputStream is) {
            ObjectMapper mapper = new ObjectMapper().setVisibility(
                    JsonMethod.FIELD, Visibility.ANY);
            T result = null;
            try {
                /**
                 * true        
                 */
                mapper.configure(
                        DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY,
                        true);
                /**
                 *          
                 */
                mapper.configure(
                        DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES,
                        false);
                result = mapper.readValue(is, clazz);
            } catch (JsonParseException e) {
                e.printStackTrace();
            } catch (JsonMappingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return result;
        }
    
        /**
         * @param clazz
         *                  bean    bean      Serializable  
         * @param json
         *            json  
         * @return       bean    : Djl p = JackSonUtil.parse(Djl.class, is);
         */
        public static  T parse(Class clazz, String json) {
            ObjectMapper mapper = new ObjectMapper().setVisibility(
                    JsonMethod.FIELD, Visibility.ANY);
            T result = null;
            try {
                /**
                 * true        
                 */
                mapper.configure(
                        DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY,
                        true);
                /**
                 *          
                 */
                mapper.configure(
                        DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES,
                        false);
                result = mapper.readValue(json, clazz);
            } catch (Exception e) {
                e.printStackTrace();
            } 
            return result;
        }
    }
    

    이런 방식이 있으면 어떤 복잡한 json도 해석할 수 있지만 주의해야 할 것은 다음과 같다.실체 bean의 구조는 json의 데이터 구조와 같아야 한다.2. 실체 bean의 데이터 명칭은 json에 대응하는 키워드와 일치해야 합니다. 행운을 빕니다.

    좋은 웹페이지 즐겨찾기