자바 에서 json 파일 을 자동 으로 읽 고 실체 클래스 로 전환 합 니 다.

5227 단어 자바
생각:
1 보조 클래스 를 만 들 고 json 파일 과 전환 실체 클래스 와 각각 대응 하 는 관 계 를 구축한다.
2 보조 클래스 를 만 드 는 주석 속성 은 json 파일 속성 과 대응 합 니 다.
3 보조 클래스 필드 속성 은 실체 클래스 와 같 습 니 다.
구체 적 수요
json 파일
{"Main": {"TestNo": "30103182222","appliName": "  "},
"other":{}}

저장 클래스
public class Obj {
    private String voteName;
    private String DanNo;
   
}

json 파일 을 읽 어서 실체 클래스 Obj 에 저장
구체 적 실현
1. 주해 류 를 만 들 고 type 은 json 대상 과 대응 하 며 string 은 해당 하 는 속성 명 을 조회 합 니 다.
@Documented
@Inherited
@Target({ ElementType.FIELD, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface ParseJsonField {
    public String type() default "";
    public String value() default "";
}

2 보조 클래스 만 들 기
public class ParseObj {
    @ParseJsonField(type="Main",value="appliName")
    private String voteName;
    @ParseJsonField(type="Main",value="TestNo")
    private String DanNo;
   
}


2  json 파일 에 반 사 된 json 대상 에서 해당 속성 값 을 읽 어 보조 클래스 에 부여 합 니 다.
    // jsonObject    object.
    public static  void readJson(JSONObject jsonObject, T toObj, String type) {
        //          
        Field[] f2 = toObj.getClass().getDeclaredFields();
        //        
        for (Field field : f2) {
            //      
            field.setAccessible(true);
            try {
                //       
                if (field.isAnnotationPresent(ParseJsonField.class)) {
                    //      
                    ParseJsonField JsonField = field.getAnnotation(ParseJsonField.class);
                    //    json  
                    if (type.equals(JsonField.type())) {
                        //  json     
                        Object valueObject = jsonObject.get(JsonField.value());
                        //        
                        String Attrtype = field.getGenericType().toString();
                        String valueObject_str=String.valueOf(valueObject);
                        if (valueObject != null&&valueObject_str.length()>0) {
                            if (Attrtype.equals("class java.sql.Timestamp")) {
                                    if (valueObject_str.length() <= 10) {
                                        valueObject_str = valueObject_str + " 00:00:00";
                                    }
                                field.set(toObj, Timestamp.valueOf(valueObject_str));
                            } else if (Attrtype.equals("class java.lang.String")) {
                                field.set(toObj, String.valueOf(valueObject));
                            } else if (Attrtype.equals("class java.lang.Integer")) {
                                    field.set(toObj, Integer.parseInt(valueObject_str));//
                            } else if (Attrtype.equals("class java.math.BigDecimal")) {
                                    field.set(toObj,new BigDecimal(valueObject_str));//
                            } else {
                                field.set(toObj, valueObject);
                            }
                        }
                    }
                }
            } catch (IllegalArgumentException | IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();

            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                System.out.print(toObj);
            }
        }
    }

3 반사 로 보조 클래스 의 값 을 저장 클래스 에 저장 합 니 다.
    //            toObj      fromObj    
    public static  void tryUpdate(T1 formObj, T2 toObj) {
        // TODO Auto-generated method stub
        //          
        Field[] f2 = toObj.getClass().getDeclaredFields();
        //        
        for (Field field : f2) {
            //      
            field.setAccessible(true);
            try {
                //          
                Object valueObject = field.get(toObj);
                if (valueObject != null) {
                    //         
                    Field formField = formObj.getClass().getDeclaredField(field.getName());
                    //      
                    formField.setAccessible(true);
                    //     
                    formField.set(formObj, valueObject);
                }
            } catch (IllegalArgumentException | IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (NoSuchFieldException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }

4 실제 사용
JSONObject JsonData= data.getJSONObject(JsonStr);
ParseObj parseObj = new ParseObj();
readJson(JsonData, parseObj, "Main");
tryUpdate(Obj, parseObj);

좋은 웹페이지 즐겨찾기