JSON 与JAVA数据的相互转换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | import net.sf.json.JSONArray; import net.sf.json.JSONException; import net.sf.json.JSONObject; import net.sf.json.JSONSerializer; /** * json对象转换为java对象 * * @throws JSONException */ @Test public void jsonToJava(){ String json= "[{\"addTime\":\"2011-09-19 14:23:02\",\"iccid\":\"1111\",\"id\":0,\"imei\":\"2222\",\"imsi\":\"3333\",\"phoneType\":\"4444\",\"remark\":\"aaaa\",\"tel\":\"5555\"}]" ; //接收{}对象,此处接收数组对象会有异常 if (json.indexOf( "[" )!=- 1 ){ json=json.replace( "[" , "" ); } if (json.indexOf( "]" )!=- 1 ){ json=json.replace( "]" , "" ); } JSONObject obj= new JSONObject().fromObject(json); SimInfo simInfo=(SimInfo)JSONObject.toBean(obj, SimInfo. class ); System.out.println( "obj: " +simInfo); System.out.println(simInfo.getAddTime()); System.out.println(simInfo.getIccid()); System.out.println(simInfo.getImei()); System.out.println(simInfo.getImsi()); System.out.println(simInfo.getPhoneType()); System.out.println(simInfo.getRemark()); System.out.println(simInfo.getTel()); System.out.println(simInfo.getId()); DaoFactory.getSimInfoDao().add(simInfo); } /** * 将json转换为java集合对象 */ @Test public void jsonToJavas(){ String jsons= "[{\"addTime\":\"2011-09-19 14:23:02\",\"iccid\":\"1111\",\"id\":0,\"imei\":\"2222\",\"imsi\":\"3333\",\"phoneType\":\"4444\",\"remark\":\"aaaa\",\"tel\":\"5555\"}," + "{\"addTime\":\"2011-11-11 14:23:02\",\"iccid\":\"2222\",\"id\":0,\"imei\":\"2222\",\"imsi\":\"3333\",\"phoneType\":\"4444\",\"remark\":\"aaaa\",\"tel\":\"5555\"}]" ; List<SimInfo> simInfos = getJavaCollection( new SimInfo(),jsons); System.out.println(simInfos.size()); for (SimInfo simInfo:simInfos){ System.out.println( "addTime: " +simInfo.getAddTime()); System.out.println( "=========" ); } } /** * 封装将json对象转换为java集合对象 * * @param <T> * @param clazz * @param jsons * @return */ private <T> List<T> getJavaCollection(T clazz, String jsons) { List<T> objs= null ; JSONArray jsonArray=(JSONArray)JSONSerializer.toJSON(jsons); if (jsonArray!= null ){ objs= new ArrayList<T>(); List list=(List)JSONSerializer.toJava(jsonArray); for (Object o:list){ JSONObject jsonObject=JSONObject.fromObject(o); T obj=(T)JSONObject.toBean(jsonObject, clazz.getClass()); objs.add(obj); } } return objs; } /** * java对象转换为json对象 * * @throws JSONException */ @Test public void javaToJson(){ SimInfo simInfo= new SimInfo(); simInfo.setAddTime(UtilTool.dateToStr( new Date(), null )); simInfo.setIccid( "1111" ); simInfo.setImei( "2222" ); simInfo.setImsi( "3333" ); simInfo.setPhoneType( 4 ); simInfo.setRemark( "aaaa" ); simInfo.setTel( "5555" ); //java对象转换为json对象 String json= new JSONArray().fromObject(simInfo).toString(); //json: [{"addTime":"2011-09-19 14:23:02","iccid":"1111","id":0,"imei":"2222","imsi":"3333","phoneType":"4444","remark":"aaaa","tel":"5555"}] System.out.println( "json: " +json); } |
jar包 jackson-core-asl-1.7.2.jar ; jackson-mapper-asl-1.7.2.jar
//将一个Java对象转换成JSON
StringWriter writer = new StringWriter();
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(writer, simInfo);
String json=writer.toString();
基于json-lib.jar包Json实例程序
1 2 3 4 5 6 7 8 9 10 | 1 .JSONObject to DynaBean String json = "{name=\"json\",bool:true,int:1,double:2.2}" ; JSONObject jsonObject = JSONObject.fromObject(json); //抽象的写法:DynaBean bean = (DynaBean) JSONSerializer.toJava( jsonObject ); Object bean = JSONObject.toBean(jsonObject); //Object bean1 = JSONSerializer.toJava(jsonObject); assertEquals(jsonObject.get( "name" ), PropertyUtils.getProperty(bean, "name" )); assertEquals(jsonObject.get( "bool" ), PropertyUtils.getProperty(bean, "bool" )); assertEquals(jsonObject.get( "int" ), PropertyUtils.getProperty(bean, "int" )); assertEquals(jsonObject.get( "double" ), PropertyUtils.getProperty(bean, "double" )); |
2.JSONObject to JavaBean
1 2 3 4 | String json = "{name:\"zhangsan\",age:25,hight:1.72,sex:true}" ; JSONObject jsonObject = JSONObject.fromObject(json); UserBean bean = (UserBean) JSONObject.toBean(jsonObject, UserBean. class ); System.out.println(jsonObject); |
理论上,这样就可以了,但时,有异常Caused by: java.lang.NoSuchMethodException: com.json.Json$UserBean.<init>()
3.JSONArray to List
1 2 3 | String json = "[\"first\",\"second\"]" ; JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON(json); List output = (List) JSONSerializer.toJava(jsonArray); |
4.JSONArray to array
String json = "[\"first\",\"second\"]";
1 2 3 4 5 6 7 | JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON(json); JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setArrayMode(JsonConfig.MODE_OBJECT_ARRAY); Object[] output = (Object[]) JSONSerializer.toJava(jsonArray, jsonConfig); Object[] expected = new Object[] { "first" , "second" }; ArrayAssertions.assertEquals(expected, output); |
5.JSON 字符串 专为 JavaBean
1 2 3 4 5 6 7 8 9 10 11 | String str= "[{\"id\":\"328\",\"mestype\":\"inbox\"},{\"id\":\"327\",\"mestype\":\"inbox\"},{\"id\":\"279\",\"mestype\":\"already\"},{\"id\":\"278\",\"mestype\":\"already\"},{\"id\":\"277\",\"mestype\":\"already\"},{\"id\":\"310\",\"mestype\":\"inbox\"},{\"id\":\"308\",\"mestype\":\"inbox\"},{\"id\":\"305\",\"mestype\":\"inbox\"},{\"id\":\"304\",\"mestype\":\"inbox\"},{\"id\":\"303\",\"mestype\":\"inbox\"}]" ; JSONArray jsonArray=(JSONArray) JSONSerializer.toJSON(str); List list=(List)JSONSerializer.toJava(jsonArray); for (Object obj: list) { JSONObject jsonObject = JSONObject.fromObject(obj); MessageBean bean = (MessageBean) JSONObject.toBean(jsonObject, MessageBean. class ); String id=bean.getId()+ "" ; String type=bean.getMestype(); System.out.println(id+ " " +type); } System.out.println(list.size()); |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步