一、用org.json构造和解析Json数据的方法
由于org.json不能直接与bean进行转换,需要通过map进行中转,为了方便,我这里写了一个工具类JsonHelper,用于Json与Map、Bean的相互转换
package com.json; import java.lang.reflect.Method; import java.text.ParseException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; /** * * 1:将JavaBean转换成Map、JSONObject * 2:将Map转换成Javabean * 3:将JSONObject转换成Map、Javabean * * @author Alexia */ public class JsonHelper { /** * 将Javabean转换为Map * * @param javaBean * javaBean * @return Map对象 */ public static Map toMap(Object javaBean) { Map result = new HashMap(); Method[] methods = javaBean.getClass().getDeclaredMethods(); for (Method method : methods) { try { if (method.getName().startsWith("get")) { String field = method.getName(); field = field.substring(field.indexOf("get") + 3); field = field.toLowerCase().charAt(0) + field.substring(1); Object value = method.invoke(javaBean, (Object[]) null); result.put(field, null == value ? "" : value.toString()); } } catch (Exception e) { e.printStackTrace(); } } return result; } /** * 将Json对象转换成Map * * @param jsonObject * json对象 * @return Map对象 * @throws JSONException */ public static Map toMap(String jsonString) throws JSONException { JSONObject jsonObject = new JSONObject(jsonString); Map result = new HashMap(); Iterator iterator = jsonObject.keys(); String key = null; String value = null; while (iterator.hasNext()) { key = (String) iterator.next(); value = jsonObject.getString(key); result.put(key, value); } return result; } /** * 将JavaBean转换成JSONObject(通过Map中转) * * @param bean * javaBean * @return json对象 */ public static JSONObject toJSON(Object bean) { return new JSONObject(toMap(bean)); } /** * 将Map转换成Javabean * * @param javabean * javaBean * @param data * Map数据 */ public static Object toJavaBean(Object javabean, Map data) { Method[] methods = javabean.getClass().getDeclaredMethods(); for (Method method : methods) { try { if (method.getName().startsWith("set")) { String field = method.getName(); field = field.substring(field.indexOf("set") + 3); field = field.toLowerCase().charAt(0) + field.substring(1); method.invoke(javabean, new Object[] { data.get(field) }); } } catch (Exception e) { } } return javabean; } /** * JSONObject到JavaBean * * @param bean * javaBean * @return json对象 * @throws ParseException * json解析异常 * @throws JSONException */ public static void toJavaBean(Object javabean, String jsonString) throws ParseException, JSONException { JSONObject jsonObject = new JSONObject(jsonString); Map map = toMap(jsonObject.toString()); toJavaBean(javabean, map); } }
这里以基本的几个常用方法进行测试
package com.json; import java.text.ParseException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; /** * 使用json-lib构造和解析Json数据 * * @author Alexia * @date 2013/5/23 * */ public class OrgJsonTest { /** * 构造Json数据 * * @return * @throws JSONException */ public static String BuildJson() throws JSONException { // JSON格式数据解析对象 JSONObject jo = new JSONObject(); // 下面构造两个map、一个list和一个Employee对象 Map<String, String> map1 = new HashMap<String, String>(); map1.put("name", "Alexia"); map1.put("sex", "female"); map1.put("age", "23"); Map<String, String> map2 = new HashMap<String, String>(); map2.put("name", "Edward"); map2.put("sex", "male"); map2.put("age", "24"); List<Map> list = new ArrayList<Map>(); list.add(map1); list.add(map2); Employee employee = new Employee(); employee.setName("wjl"); employee.setSex("female"); employee.setAge(24); // 将Map转换为JSONArray数据 JSONArray ja = new JSONArray(); ja.put(map1); System.out.println("JSONArray对象数据格式:"); System.out.println(ja.toString()); // 将Javabean转换为Json数据(需要Map中转) JSONObject jo1 = JsonHelper.toJSON(employee); System.out.println(" 仅含Employee对象的Json数据格式:"); System.out.println(jo1.toString()); // 构造Json数据,包括一个map和一个含Employee对象的Json数据 jo.put("map", ja); jo.put("employee", jo1.toString()); System.out.println(" 最终构造的JSON数据格式:"); System.out.println(jo.toString()); return jo.toString(); } /** * 解析Json数据 * * @param jsonString * Json数据字符串 * @throws JSONException * @throws ParseException */ public static void ParseJson(String jsonString) throws JSONException, ParseException { JSONObject jo = new JSONObject(jsonString); JSONArray ja = jo.getJSONArray("map"); System.out.println(" 将Json数据解析为Map:"); System.out.println("name: " + ja.getJSONObject(0).getString("name") + " sex: " + ja.getJSONObject(0).getString("sex") + " age: " + ja.getJSONObject(0).getInt("age")); String jsonStr = jo.getString("employee"); Employee emp = new Employee(); JsonHelper.toJavaBean(emp, jsonStr); System.out.println(" 将Json数据解析为Employee对象:"); System.out.println("name: " + emp.getName() + " sex: " + emp.getSex() + " age: " + emp.getAge()); } /** * @param args * @throws JSONException * @throws ParseException */ public static void main(String[] args) throws JSONException, ParseException { // TODO Auto-generated method stub ParseJson(BuildJson()); } }
1. List集合转换成json方法
List list = new ArrayList(); list.add( "first" ); list.add( "second" ); JSONArray jsonArray2 = JSONArray.fromObject( list );
2. Map集合转换成json方法
Map map = new HashMap(); map.put("name", "json"); map.put("bool", Boolean.TRUE); map.put("int", new Integer(1)); map.put("arr", new String[] { "a", "b" }); map.put("func", "function(i){ return this.arr[i]; }"); JSONObject json = JSONObject.fromObject(map);
3. Bean转换成json代码
JSONObject jsonObject = JSONObject.fromObject(new JsonBean());
4. 数组转换成json代码
boolean[] boolArray = new boolean[] { true, false, true }; JSONArray jsonArray1 = JSONArray.fromObject(boolArray);
5. 一般数据转换成json代码
JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']" );
6. beans转换成json代码
List list = new ArrayList(); JsonBean2 jb1 = new JsonBean2(); jb1.setCol(1); jb1.setRow(1); jb1.setValue("xx"); JsonBean2 jb2 = new JsonBean2(); jb2.setCol(2); jb2.setRow(2); jb2.setValue(""); list.add(jb1); list.add(jb2); JSONArray ja = JSONArray.fromObject(list);
这里以基本的几个常用方法进行测试
package com.json; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; /** * 使用json-lib构造和解析Json数据 * * @author Alexia * @date 2013/5/23 * */ public class JsonTest { /** * 构造Json数据 * * @return */ public static String BuildJson() { // JSON格式数据解析对象 JSONObject jo = new JSONObject(); // 下面构造两个map、一个list和一个Employee对象 Map<String, String> map1 = new HashMap<String, String>(); map1.put("name", "Alexia"); map1.put("sex", "female"); map1.put("age", "23"); Map<String, String> map2 = new HashMap<String, String>(); map2.put("name", "Edward"); map2.put("sex", "male"); map2.put("age", "24"); List<Map> list = new ArrayList<Map>(); list.add(map1); list.add(map2); Employee employee = new Employee(); employee.setName("wjl"); employee.setSex("female"); employee.setAge(24); // 将Map转换为JSONArray数据 JSONArray ja1 = JSONArray.fromObject(map1); // 将List转换为JSONArray数据 JSONArray ja2 = JSONArray.fromObject(list); // 将Bean转换为JSONArray数据 JSONArray ja3 = JSONArray.fromObject(employee); System.out.println("JSONArray对象数据格式:"); System.out.println(ja1.toString()); System.out.println(ja2.toString()); System.out.println(ja3.toString()); // 构造Json数据,包括一个map和一个Employee对象 jo.put("map", ja1); jo.put("employee", ja2); System.out.println(" 最终构造的JSON数据格式:"); System.out.println(jo.toString()); return jo.toString(); } /** * 解析Json数据 * * @param jsonString Json数据字符串 */ public static void ParseJson(String jsonString) { // 以employee为例解析,map类似 JSONObject jb = JSONObject.fromObject(jsonString); JSONArray ja = jb.getJSONArray("employee"); List<Employee> empList = new ArrayList<Employee>(); // 循环添加Employee对象(可能有多个) for (int i = 0; i < ja.size(); i++) { Employee employee = new Employee(); employee.setName(ja.getJSONObject(i).getString("name")); employee.setSex(ja.getJSONObject(i).getString("sex")); employee.setAge(ja.getJSONObject(i).getInt("age")); empList.add(employee); } System.out.println(" 将Json数据转换为Employee对象:"); for (int i = 0; i < empList.size(); i++) { Employee emp = empList.get(i); System.out.println("name: " + emp.getName() + " sex: " + emp.getSex() + " age: " + emp.getAge()); } } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub ParseJson(BuildJson()); } }
三、用jackon构造和解析Json数据的方法
1.解析
userData.java
package com.recommendation.management; public class UserData { private String userName; private String userPassword; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } }
解析
import com.fasterxml.jackson.databind.ObjectMapper;
import com.recommendation.management.UserData;
// 得到客户端的数据 String users = request.getParameter("data"); // 解析json ObjectMapper mapper = new ObjectMapper(); UserData userData = mapper.readValue(users, UserData.class); // 用户名,密码 String userName = userData.getUserName(); String userPassword = userData.getUserPassword();