자바 에서 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);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.