一:以下是用到的jar名称:
commons-beanutils-1.6.jar
commons-collections-3.2.1.jar
commons-lang-2.6.jar
commons-logging-1.1.1.jar
ezmorph-1.0.3.jar
json-lib-2.2.3-jdk13.jar
json.jar
jar下载地址
链接: https://pan.baidu.com/s/1c2Mkqli 密码: 6ems
二:练习的时候用到了内部类,所以里面有一点对内部类的使用方法。其余的就是json在java中日期转换和json和字符串之间的互转。
用过之后感觉就和Map是差不多的
以下是练习源代码
1 package com.tang; 2 3 import java.util.ArrayList; 4 import java.util.Date; 5 import java.util.HashMap; 6 import java.util.List; 7 import java.util.Map; 8 9 import org.apache.commons.lang.time.DateFormatUtils; 10 11 import net.sf.json.JSONArray; 12 import net.sf.json.JSONObject; 13 import net.sf.json.JsonConfig; 14 import net.sf.json.processors.JsonValueProcessor; 15 /** 16 * json练习 17 * @author tbb 18 * @version 2017-4-8 19 */ 20 public class DemoJsons { 21 22 23 /** 24 * json转换为字符串 25 */ 26 public static void doJsonToString(){ 27 //jsonObject先转为json数组再去转换成字符串 28 JSONObject json = new JSONObject(); 29 30 //向json中添加数据 31 json.put("username", "wangl"); 32 33 //往json数组添加值 第一种方法 34 // JSONArray jsons = JSONArray.fromObject(json); 35 36 //往json数组添加值 第二种方法 37 JSONArray jsons = new JSONArray(); 38 jsons.add(json); 39 40 //数组转换为String 41 System.out.println(jsons.toString()); 42 //将数组中的jsonObjejct转换为String (可参考下面:getJsonArrayToString()方法) 43 System.out.println(jsons.getString(0)); 44 45 //注如果非要转换成jsonObject类型的字符串 46 // String jsonToString1 = jsons.toString(); 47 // String jsonToString2 = jsonToString1.substring(1, jsonToString1.length()-1); 48 // System.out.println(jsonToString2); 49 50 } 51 52 /** 53 * map转换为json对象 54 */ 55 static void doMapToJson(){ 56 Map<String, Object> map = new HashMap<String, Object>(); 57 map.put("username", "zhangsan"); 58 map.put("password", "123456"); 59 60 //转换为json数组 61 JSONArray array = JSONArray.fromObject(map); 62 System.out.println(array); 63 64 //转换为json对象 65 JSONObject json = JSONObject.fromObject(map); 66 System.out.println(json); 67 } 68 69 70 /** 71 * jsonObject中的一些方法应用 72 */ 73 public static void doJsonObjectHandle(){ 74 //外部类调用内部类 75 DemoJsons.Person p = new DemoJsons().new Person(); 76 p.setUserName("zhangsan"); 77 p.setAge(19); 78 79 //java对象转换成json对象 80 JSONObject json = JSONObject.fromObject(p); 81 82 //判断是否包含某个值 包含:true 反之:false 83 // System.out.println(json.containsValue(19)); 84 85 //判断是否包含某个key 包含:true 反之:false 86 // System.out.println(json.containsKey("userName")); 87 88 //替换json对象中某个属性的值 89 // JSONObject json1 = json.element("userName", "lisi"); 90 // System.out.println(json1); 91 92 //根据key在value中增加值 93 // System.out.println(json.accumulate("age", 17)); //执行结果 : {"age":[19,17],"endTime":null,"userName":"zhangsan"} 94 95 //和json.get("userName");返回值是相同点的 96 // System.out.println(json.opt("userName")); 97 98 //往json中增加新的key和value 99 // json.put("shuai", "shuai"); 100 101 //根据key 删除key-value 102 // json.remove("shuai"); 103 System.out.println(json); 104 } 105 106 107 /** 108 * java对象转换成json对象 109 */ 110 public static void doObject(){ 111 /** 112 * 外部类调用内部类 113 * 1:如果内部类是public DemoJsons.Person p = new DemoJsons().new Person(); 114 * 2:如果内部类是静态的 new DateJsonValueProcessor(); 115 */ 116 //外部类调用内部类 117 DemoJsons.Person p = new DemoJsons().new Person(); 118 p.setUserName("zhangsan"); 119 p.setAge(19); 120 DemoJsons.Person p2 = new DemoJsons().new Person(); 121 p2.setUserName("lisi"); 122 p2.setAge(19); 123 DemoJsons.Person p3 = new DemoJsons().new Person(); 124 p3.setUserName("wangwu"); 125 p3.setAge(19); 126 List<Person> ps = new ArrayList<Person>(); 127 ps.add(p); 128 ps.add(p2); 129 ps.add(p3); 130 131 //java对象转换成json对象 132 JSONObject json = JSONObject.fromObject(p); 133 System.out.println(json); 134 135 //java list转换成json数组 136 JSONArray jsons = JSONArray.fromObject(ps); 137 System.out.println(jsons); 138 139 //获取json数组中的json对象 140 JSONObject obj = jsons.getJSONObject(2); 141 System.out.println(obj); 142 143 //获取json对象中的属性值 相当与Map(key-value) 和map取值一样 144 System.out.println(obj.getString("userName")); 145 System.out.println(obj.getInt("age")); 146 } 147 148 149 /** 150 * 日期转换 151 */ 152 public static void demoDate(){ 153 //外部类调用内部类 154 Person p = new DemoJsons().new Person(); 155 p.setAge(18); 156 p.setEndTime(new Date()); 157 p.setUserName("zhangsan"); 158 //日期转换 159 JsonConfig jsonConfig = new JsonConfig(); 160 161 //第一种日期转换 需要新建一个类DateJsonValueProcessor 162 // jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor()); 163 164 //第二种日期转换 165 jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonValueProcessor() { 166 167 @Override 168 public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) { 169 // TODO Auto-generated method stub 170 //导包import org.apache.commons.lang.time.DateFormatUtils; jar包:commons-lang-2.6.jar 171 return DateFormatUtils.format((Date)arg1, "yyyy-MM-dd"); 172 } 173 174 @Override 175 public Object processArrayValue(Object arg0, JsonConfig arg1) { 176 // TODO Auto-generated method stub 177 return null; 178 } 179 }); 180 181 JSONObject json = JSONObject.fromObject(p,jsonConfig); 182 System.out.println(json); 183 } 184 185 /** 186 * 把json数组里的某个对象转换为字符串 187 */ 188 public static void getJsonArrayToString(){ 189 String us = "[{\"userName\":\"zhangsan\"},{\"userName\":\"lisi\"}]"; 190 JSONArray json = JSONArray.fromObject(us); 191 System.out.println(json.getString(0)); 192 } 193 194 /** 195 * 测试实体类 196 * @author tbb 197 * 198 */ 199 public class Person{ 200 201 private String userName; 202 private Integer age; 203 private Date endTime; 204 205 public Date getEndTime() { 206 return endTime; 207 } 208 public void setEndTime(Date endTime) { 209 this.endTime = endTime; 210 } 211 public String getUserName() { 212 return userName; 213 } 214 public void setUserName(String userName) { 215 this.userName = userName; 216 } 217 public Integer getAge() { 218 return age; 219 } 220 public void setAge(Integer age) { 221 this.age = age; 222 } 223 224 } 225 226 /** 227 * 日期格式化处理类 228 * @author tbb 229 * 230 */ 231 public static class DateJsonValueProcessor implements JsonValueProcessor{ 232 //json数组日期转换 233 @Override 234 public Object processArrayValue(Object arg0, JsonConfig arg1) { 235 // TODO Auto-generated method stub 236 //判断是否是Date类型 237 if (arg0 instanceof Date){ 238 String str = DateFormatUtils.format((Date)arg0, "yyyy-MM-dd"); 239 return str; 240 } 241 return null; 242 } 243 //json对象日期转换 244 @Override 245 public Object processObjectValue(String arg0, Object arg1, 246 JsonConfig arg2) { 247 // TODO Auto-generated method stub 248 return DateFormatUtils.format((Date)arg1, "yyyy-MM-dd"); 249 } 250 251 } 252 253 254 /** 255 * @param args 256 */ 257 public static void main(String[] args) { 258 // TODO Auto-generated method stub 259 // doObject(); 260 // demoDate(); 261 // doJsonToString(); 262 // doJsonObjectHandle(); 263 getJsonArrayToString(); 264 } 265 266 }