[android开发] json格式 与javaBean, HashMap格式之间的转换, 网络请求时常用.

本文介绍了在Android开发中如何进行JSON格式数据与JavaBean、HashMap之间的转换,提供了作者自编的方法,详细阐述了网络请求时常用的数据处理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


这个是自己写的方法, 可能有点杂乱.


public class ConvertUtil {

	/**
	 * 把非空属性拷贝到新对象
	 * 
	 * @param from
	 * @param to
	 */
	public static void copyProperties(Object from, Object to) {
		try {
			Class<? extends Object> clazz = from.getClass();
			Field[] fields = clazz.getDeclaredFields();
			Object fromV;
			Object toV;
			// 遍历字段
			for (Field field : fields) {
				try {
					field.setAccessible(true);
					fromV = field.get(from);
					toV = field.get(to);

					if (toV instanceof String) {
						if (!TextUtils.isEmpty((String) fromV)) {
							field.set(to, fromV);
						}
					} else if (toV instanceof ArrayList) {
						ArrayList fromArr = (ArrayList) fromV;
						if (fromArr != null && fromArr.size() > 0) {
							field.set(to, fromArr);
						}
					} else {
						if (fromV != null) {
							field.set(to, fromV);
						}
					}

				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		} catch (Exception e) {
		}
	}

	/**
	 * json装为bean
	 * 
	 * @param json
	 * @param clazz
	 * @return
	 */
	public static <T> T json2Bean(JSONObject json, Class<T> clazz) {
		T obj = null;
		try {
			obj = newInstance(clazz);
			doJson2Bean(json, obj);
			return obj;
		} catch (Exception e) {
			e.printStackTrace();
			return obj;
		}
	}

	/**
	 * beanlist转为mapList
	 * 
	 * @param beanList
	 * @return
	 */
	public static <T> ArrayList<HashMap<String, Object>> beanList2mapList(ArrayList<T> beanList) {
		ArrayList<HashMap<String, Object>> mapList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> map;
		if (beanList != null) {
			for (T bean : beanList) {
				map = new HashMap<String, Object>();
				try {
					Field[] fields = bean.getClass().getDeclaredFields();
					Object value;
					// 遍历字段
					for (Field field : fields) {
						try {
							field.setAccessible(true);
							value = field.get(bean);
							if (value != null)
								map.put(field.getName(), value);
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
				mapList.add(map);
			}
		}
		return mapList;
	}

	/**
	 * beanlist转为array
	 * 
	 * @param beanList
	 * @return
	 */
	public static <T> JSONArray beanList2array(ArrayList<T> beanList, ArrayList<String> maskNames) {
		JSONArray array = new JSONArray();
		JSONObject obj = new JSONObject();
		if (beanList != null) {
			for (T bean : beanList) {
				obj = new JSONObject();
				try {
					Field[] fields = bean.getClass().getDeclaredFields();
					Object value;
					// 遍历字段
					for (Field field : fields) {
						try {
							field.setAccessible(true);
							value = field.get(bean);
							// 屏蔽字段
							if (value != null && maskNames != null && !maskNames.contains(field.getName()))
								obj.put(field.getName(), value);
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
				array.put(obj);
			}
		}
		return array;
	}

	/**
	 * json数组转为beanList
	 * 
	 * @param array
	 * @param clazz
	 * @return
	 */
	public static <T> ArrayList<T> array2BeanList(JSONArray array, Class<T> clazz) {
		ArrayList<T> list = new ArrayList();
		int len = array.length();
		try {
			// 遍历数组
			for (int i = 0; i < len; i++) {
				Object obj = newInstance(clazz);
				list.add((T) obj);
				doJson2Bean(array.getJSONObject(i), obj);
			}
		} catch (Exception e) {
		}
		return list;
	}

	/**
	 * json数组转为mapList
	 * 
	 * @param array
	 * @return
	 */
	public static <T> ArrayList<HashMap<String, Object>> array2MapList(JSONArray array) {
		ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
		int len = array.length();
		HashMap<String, Object> map;
		try {
			// 遍历数组
			for (int i = 0; i < len; i++) {
				map = new HashMap<String, Object>();
				list.add(map);
				doJson2Map(array.getJSONObject(i), map);
			}
		} catch (Exception e) {
		}
		return list;
	}

	// 
	/**
	 * 递归
	 * 
	 * @param json
	 * @param map
	 */
	private static void doJson2Map(JSONObject json, HashMap<String, Object> map) {
		try {
			// 所有的key
			Iterator it = json.keys();
			Field field;
			// 遍历key
			while (it.hasNext()) {
				// key
				String key = (String) it.next();
				// json value
				Object value = json.get(key);

				try {
					if (value instanceof JSONObject) {
						HashMap<String, Object> m = new HashMap<String, Object>();
						map.put(key, m);
						doJson2Map((JSONObject) value, m);
					} else if (value instanceof JSONArray) {
						JSONArray array = (JSONArray) value;
						ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
						map.put(key, list);
						// 泛型信息
						int len = array.length();
						// 遍历数组
						for (int i = 0; i < len; i++) {
							HashMap<String, Object> m = new HashMap<String, Object>();
							list.add(m);
							doJson2Map(array.getJSONObject(i), m);
						}
					} else {
						map.put(key, value);
					}
				} catch (Exception e) {
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private static <T> ArrayList<T> array2Bean(JSONArray array, Class<T> clazz, ArrayList list) {
		int len = array.length();
		try {
			// 遍历数组
			for (int i = 0; i < len; i++) {
				Object obj = newInstance(clazz);
				list.add((T) obj);
				doJson2Bean(array.getJSONObject(i), obj);
			}
		} catch (Exception e) {
		}
		return list;
	}

	private static <T> T newInstance(Class<T> clazz) {
		try {
			Constructor constructor = clazz.getDeclaredConstructors()[0];
			constructor.setAccessible(true);
			constructor.setAccessible(true);
			T obj = (T) constructor.newInstance();
			return obj;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	private static void doJson2Bean(JSONObject json, Object entity) {
		try {
			// 所有的key
			Iterator it = json.keys();
			Class clazz = entity.getClass();
			Field field;
			// 遍历key
			while (it.hasNext()) {
				// key
				String key = (String) it.next();
				// json value
				Object value = json.get(key);

				try {
					field = clazz.getDeclaredField(key);
					field.setAccessible(true);
					if (value instanceof JSONObject) {
						Object obj = field.get(entity);
						doJson2Bean((JSONObject) value, obj);
					} else if (value instanceof JSONArray) {
						JSONArray array = (JSONArray) value;
						List list = (List) field.get(entity);
						// 泛型信息
						Class genClazz = getSuperClassGenricType(field, 0);
						int len = array.length();

						// 遍历数组
						for (int i = 0; i < len; i++) {
							Object o = array.get(i);
							if (o instanceof JSONObject) {
								Object obj = newInstance(genClazz);
								list.add(obj);
								doJson2Bean(array.getJSONObject(i), obj);
							} else {
								String str = o.toString();
								if (genClazz.equals(Double.class)) {
									list.add(Double.parseDouble(str));
								} else if (genClazz.equals(Integer.class)) {
									list.add(Integer.parseInt(str));
								} else if (genClazz.equals(Long.class)) {
									list.add(Long.parseLong(str));
								} else if (genClazz.equals(Float.class)) {
									list.add(Float.parseFloat(str));
								} else if (genClazz.equals(Boolean.class)) {
									list.add(Boolean.parseBoolean(str));
								} else if (genClazz.equals(String.class)) {
									list.add(str);
								}
							}
						}
					} else {
						try2SetField(field, entity, value);
					}
				} catch (Exception e) {
					System.out.println(e);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private static void try2SetField(Field field, Object entity, Object value) {
		// Class genClazz = entity.getClass();
		try {
			String str = value.toString();
			if ("null".equals(str))
				return;

			Class genClazz = (Class) field.getGenericType();
			
			if (genClazz.equals(Double.class)) {
				field.set(entity, Double.parseDouble(str));
			} else if (genClazz.equals(Integer.class)) {
				field.set(entity, Integer.parseInt(str));
			} else if (genClazz.equals(Long.class)) {
				field.set(entity, Long.parseLong(str));
			} else if (genClazz.equals(Float.class)) {
				field.set(entity, Float.parseFloat(str));
			} else if (genClazz.equals(Boolean.class)) {
				field.set(entity, Boolean.parseBoolean(str));
			} else if (genClazz.equals(String.class)) {
				field.set(entity, str);
			}
		} catch (Exception e) {
		}

	}

	public static RequestParams bean2Params(Object bean) {
		RequestParams params = new RequestParams();
		addParams(bean, params, "");
		return params;
	}

	private static void addParams(Object entity, RequestParams params, String prefix) {
		try {
			Field[] fields = entity.getClass().getDeclaredFields();
			Object value;
			// 遍历字段
			for (Field field : fields) {

				try {
					field.setAccessible(true);
					value = field.get(entity);

					// 不为空
					if (value != null) {
						// 是基本类型
						if ((value instanceof Number) || (value instanceof Boolean) || (value instanceof String)) {
							params.add(prefix + field.getName(), value.toString());
						} else {
							addParams(value, params, prefix + field.getName() + ".");
						}
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/*
	 * 获取泛型信息
	 */
	@SuppressWarnings("unchecked")
	private static Class<Object> getSuperClassGenricType(Field field, int index) {
		ParameterizedType pt = (ParameterizedType) field.getGenericType();
		return (Class<Object>) pt.getActualTypeArguments()[index];
	}

	@SuppressWarnings("unchecked")
	public static Class<Object> getSuperClassGenricType(final Class clazz, final int index) {

		// 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type。
		Type genType = clazz.getGenericSuperclass();

		if (!(genType instanceof ParameterizedType)) {
			return Object.class;
		}
		// 返回表示此类型实际类型参数的 Type 对象的数组。
		Type[] params = ((ParameterizedType) genType).getActualTypeArguments();

		if (index >= params.length || index < 0) {
			return Object.class;
		}
		if (!(params[index] instanceof Class)) {
			return Object.class;
		}

		return (Class) params[index];
	}
}


fastjson是一款高性能的Java JSON处理器,它提供了很多功能实现JSON字符串Java对象的转换。复杂JSON格式字符串转换JavaBean对象,需要按照以下的方法进行操作: 首先,我们需要创建一个JavaBean类,属性需要对应的JSON格式相匹配,可以使用注解或者getter、setter方法来指定属性名。如下面的代码片段所示,我们创建了一个User类。 ```java public class User { private String name; private int age; private List<Address> addressList; // getter、setter、toString方法省略 } ``` 在User类中,我们定义了JSON格式相对应的属性,其中addressList是一个List类型,它的元素是Address类型,如下所示: ```java public class Address { private String city; private String street; private String zipCode; // getter、setter、toString方法省略 } ``` 接着,我们可以使用fastjson提供的工具类JSON.parseObject()方法将JSON格式字符串转换JavaBean对象。如下所示: ```java String jsonStr = "{\"name\":\"Tom\",\"age\":18,\"addressList\":[{\"city\":\"beijing\",\"street\":\"chaoyang\",\"zipCode\":\"100000\"},{\"city\":\"shanghai\",\"street\":\"pudong\",\"zipCode\":\"200000\"}]}"; User user = JSON.parseObject(jsonStr, User.class); ``` 在上面的代码中,我们首先定义了一个JSON格式字符串,然后使用JSON.parseObject()方法将其转换为User对象。在这个方法的第一个参数中,我们需要传入JSON格式字符串,第二个参数是目标JavaBean的类型。fastjson会自动将JSON字符串中的属性值赋值给JavaBean对象中的对应属性。如果JSON格式字符串中的属性名称JavaBean中的属性名称不匹配,我们需要在JavaBean中使用@JSONField注解或者getter、setter方法指定对应的属性名。 在将JavaBean对象转换JSON格式字符串,我们可以使用fastjson提供的工具类JSON.toJSONString()方法。如下所示: ```java String jsonUser = JSON.toJSONString(user); ``` 在上面的代码中,我们将User对象转换JSON格式字符串。 总结来说,通过fastjson将复杂JSON格式字符串转换JavaBean对象需要创建对应的JavaBean类,然后使用JSON.parseObject()方法将JSON字符串转换JavaBean对象。如果需要将JavaBean对象转换JSON字符串,我们可以使用JSON.toJSONString()方法实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值