java反射实现自定义json转对象方法-忽略字段大小写、字段个数

时间:2025-03-23 07:37:53

java反射实现自定义json转对象方法-忽略字段大小写、字段个数

开发过程中经常会遇到json转对象,可以使用FastJson或者Gson自带的工具类进行转换,但当遇到json与对象属性名称大小写不一致时,就需要我们自己处理,很早之前写了一个利用反射来实现忽略字段名称大小写,并且可以实现json字段多于对象属性时的对象赋值

    /**
	 * 对于对象属性与json字段名称大小写不一致时,进行对象的赋值
	 * @param json json字符串
	 * @param obj 需要转换的对象
	 * @return
	 */
	public static Object jsonToObject(String jsonStr, Object obj) {
		if((jsonStr) || obj==null) {
			return null;
		}
		JSONObject json = (jsonStr);
		Field[] fields = ().getDeclaredFields();
		(fields, true);
		
		//循环获取所有json字段,并将字段名全部小写
		Map<String, String> jsonMap = new HashMap<String, String>();
		for(String key:()) {
			((), key);
		}
		
		//循环对象属性,与json进行匹配
		Field field = null;
		String fieldName = null;
		String fieldTypeName = null;
		for(int i=0;i<;i++) {
			field = fields[i];
			//属性名称全部转小写
			fieldName = ().toLowerCase();
			fieldTypeName = ().getName();
			//如果json中存在相同字段,则进行赋值
			if((fieldName)) {
				try {
					(obj, getJsonData(json, (fieldName), fieldTypeName));
				} catch (Exception e) {
					();
				}
			}
		}
		return obj;
	}
	/**
	 * 按字段类型获取JSON数据,字段类型按需扩展
	 * @param json JSON对象
	 * @param fieldName 字段名
	 * @param fieldTypeName 字段属性名
	 * @return
	 */
	private static Object getJsonData(JSONObject json, String fieldName, String fieldTypeName) {
		Object jsonData = null;
		//类型按需添加
		if ("".equals(fieldTypeName)) {
			jsonData = (fieldName);
		} else if ("".equals(fieldTypeName)){
			jsonData = (fieldName);
		} else if ("double".equals(fieldTypeName)){
			jsonData = (fieldName);
		} else if ("int".equals(fieldTypeName)){
			jsonData = (fieldName);
		} else {
			jsonData = (fieldName);
		}
		return jsonData;
	}