1 packagecom.tang;2
3 importjava.util.ArrayList;4 importjava.util.Date;5 importjava.util.HashMap;6 importjava.util.List;7 importjava.util.Map;8
9 importorg.apache.commons.lang.time.DateFormatUtils;10
11 importnet.sf.json.JSONArray;12 importnet.sf.json.JSONObject;13 importnet.sf.json.JsonConfig;14 importnet.sf.json.processors.JsonValueProcessor;15 /**
16 * json练习17 *@authortbb18 *@version2017-4-819 */
20 public classDemoJsons {21
22
23 /**
24 * json转换为字符串25 */
26 public static voiddoJsonToString(){27 //jsonObject先转为json数组再去转换成字符串
28 JSONObject json = newJSONObject();29
30 //向json中添加数据
31 json.put("username", "wangl");32
33 //往json数组添加值 第一种方法34 //JSONArray jsons = JSONArray.fromObject(json);35
36 //往json数组添加值 第二种方法
37 JSONArray jsons = newJSONArray();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 voiddoMapToJson(){56 Map map = new HashMap();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 voiddoJsonObjectHandle(){74 //外部类调用内部类
75 DemoJsons.Person p = new DemoJsons().newPerson();76 p.setUserName("zhangsan");77 p.setAge(19);78
79 //java对象转换成json对象
80 JSONObject json =JSONObject.fromObject(p);81
82 //判断是否包含某个值 包含:true 反之:false83 //System.out.println(json.containsValue(19));84
85 //判断是否包含某个key 包含:true 反之:false86 //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和value99 //json.put("shuai", "shuai");100
101 //根据key 删除key-value102 //json.remove("shuai");
103 System.out.println(json);104 }105
106
107 /**
108 * java对象转换成json对象109 */
110 public static voiddoObject(){111 /**
112 * 外部类调用内部类113 * 1:如果内部类是public DemoJsons.Person p = new DemoJsons().new Person();114 * 2:如果内部类是静态的 new DateJsonValueProcessor();115 */
116 //外部类调用内部类
117 DemoJsons.Person p = new DemoJsons().newPerson();118 p.setUserName("zhangsan");119 p.setAge(19);120 DemoJsons.Person p2 = new DemoJsons().newPerson();121 p2.setUserName("lisi");122 p2.setAge(19);123 DemoJsons.Person p3 = new DemoJsons().newPerson();124 p3.setUserName("wangwu");125 p3.setAge(19);126 List ps = new ArrayList();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 voiddemoDate(){153 //外部类调用内部类
154 Person p = new DemoJsons().newPerson();155 p.setAge(18);156 p.setEndTime(newDate());157 p.setUserName("zhangsan");158 //日期转换
159 JsonConfig jsonConfig = newJsonConfig();160
161 //第一种日期转换 需要新建一个类DateJsonValueProcessor162 //jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor());163
164 //第二种日期转换
165 jsonConfig.registerJsonValueProcessor(java.util.Date.class, newJsonValueProcessor() {166
167 @Override168 publicObject processObjectValue(String arg0, Object arg1, JsonConfig arg2) {169 //TODO Auto-generated method stub170 //导包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 @Override175 publicObject 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 voidgetJsonArrayToString(){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 *@authortbb197 *198 */
199 public classPerson{200
201 privateString userName;202 privateInteger age;203 privateDate endTime;204
205 publicDate getEndTime() {206 returnendTime;207 }208 public voidsetEndTime(Date endTime) {209 this.endTime =endTime;210 }211 publicString getUserName() {212 returnuserName;213 }214 public voidsetUserName(String userName) {215 this.userName =userName;216 }217 publicInteger getAge() {218 returnage;219 }220 public voidsetAge(Integer age) {221 this.age =age;222 }223
224 }225
226 /**
227 * 日期格式化处理类228 *@authortbb229 *230 */
231 public static class DateJsonValueProcessor implementsJsonValueProcessor{232 //json数组日期转换
233 @Override234 publicObject processArrayValue(Object arg0, JsonConfig arg1) {235 //TODO Auto-generated method stub236 //判断是否是Date类型
237 if (arg0 instanceofDate){238 String str = DateFormatUtils.format((Date)arg0, "yyyy-MM-dd");239 returnstr;240 }241 return null;242 }243 //json对象日期转换
244 @Override245 publicObject 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 *@paramargs256 */
257 public static voidmain(String[] args) {258 //TODO Auto-generated method stub259 //doObject();260 //demoDate();261 //doJsonToString();262 //doJsonObjectHandle();
263 getJsonArrayToString();264 }265
266 }