一:以下是用到的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是差不多的
以下是练习源代码
package com.tang; import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.commons.lang.time.DateFormatUtils; import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
/**
* json练习
* @author tbb
* @version 2017-4-8
*/
public class DemoJsons { /**
* json转换为字符串
*/
public static void doJsonToString(){
//jsonObject先转为json数组再去转换成字符串
JSONObject json = new JSONObject(); //向json中添加数据
json.put("username", "wangl"); //往json数组添加值 第一种方法
// JSONArray jsons = JSONArray.fromObject(json); //往json数组添加值 第二种方法
JSONArray jsons = new JSONArray();
jsons.add(json); //数组转换为String
System.out.println(jsons.toString());
//将数组中的jsonObjejct转换为String (可参考下面:getJsonArrayToString()方法)
System.out.println(jsons.getString(0)); //注如果非要转换成jsonObject类型的字符串
// String jsonToString1 = jsons.toString();
// String jsonToString2 = jsonToString1.substring(1, jsonToString1.length()-1);
// System.out.println(jsonToString2); } /**
* map转换为json对象
*/
static void doMapToJson(){
Map<String, Object> map = new HashMap<String, Object>();
map.put("username", "zhangsan");
map.put("password", "123456"); //转换为json数组
JSONArray array = JSONArray.fromObject(map);
System.out.println(array); //转换为json对象
JSONObject json = JSONObject.fromObject(map);
System.out.println(json);
} /**
* jsonObject中的一些方法应用
*/
public static void doJsonObjectHandle(){
//外部类调用内部类
DemoJsons.Person p = new DemoJsons().new Person();
p.setUserName("zhangsan");
p.setAge(19); //java对象转换成json对象
JSONObject json = JSONObject.fromObject(p); //判断是否包含某个值 包含:true 反之:false
// System.out.println(json.containsValue(19)); //判断是否包含某个key 包含:true 反之:false
// System.out.println(json.containsKey("userName")); //替换json对象中某个属性的值
// JSONObject json1 = json.element("userName", "lisi");
// System.out.println(json1); //根据key在value中增加值
// System.out.println(json.accumulate("age", 17)); //执行结果 : {"age":[19,17],"endTime":null,"userName":"zhangsan"} //和json.get("userName");返回值是相同点的
// System.out.println(json.opt("userName")); //往json中增加新的key和value
// json.put("shuai", "shuai"); //根据key 删除key-value
// json.remove("shuai");
System.out.println(json);
} /**
* java对象转换成json对象
*/
public static void doObject(){
/**
* 外部类调用内部类
* 1:如果内部类是public DemoJsons.Person p = new DemoJsons().new Person();
* 2:如果内部类是静态的 new DateJsonValueProcessor();
*/
//外部类调用内部类
DemoJsons.Person p = new DemoJsons().new Person();
p.setUserName("zhangsan");
p.setAge(19);
DemoJsons.Person p2 = new DemoJsons().new Person();
p2.setUserName("lisi");
p2.setAge(19);
DemoJsons.Person p3 = new DemoJsons().new Person();
p3.setUserName("wangwu");
p3.setAge(19);
List<Person> ps = new ArrayList<Person>();
ps.add(p);
ps.add(p2);
ps.add(p3); //java对象转换成json对象
JSONObject json = JSONObject.fromObject(p);
System.out.println(json); //java list转换成json数组
JSONArray jsons = JSONArray.fromObject(ps);
System.out.println(jsons); //获取json数组中的json对象
JSONObject obj = jsons.getJSONObject(2);
System.out.println(obj); //获取json对象中的属性值 相当与Map(key-value) 和map取值一样
System.out.println(obj.getString("userName"));
System.out.println(obj.getInt("age"));
} /**
* 日期转换
*/
public static void demoDate(){
//外部类调用内部类
Person p = new DemoJsons().new Person();
p.setAge(18);
p.setEndTime(new Date());
p.setUserName("zhangsan");
//日期转换
JsonConfig jsonConfig = new JsonConfig(); //第一种日期转换 需要新建一个类DateJsonValueProcessor
// jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor()); //第二种日期转换
jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonValueProcessor() { @Override
public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) {
// TODO Auto-generated method stub
//导包import org.apache.commons.lang.time.DateFormatUtils; jar包:commons-lang-2.6.jar
return DateFormatUtils.format((Date)arg1, "yyyy-MM-dd");
} @Override
public Object processArrayValue(Object arg0, JsonConfig arg1) {
// TODO Auto-generated method stub
return null;
}
}); JSONObject json = JSONObject.fromObject(p,jsonConfig);
System.out.println(json);
} /**
* 把json数组里的某个对象转换为字符串
*/
public static void getJsonArrayToString(){
String us = "[{\"userName\":\"zhangsan\"},{\"userName\":\"lisi\"}]";
JSONArray json = JSONArray.fromObject(us);
System.out.println(json.getString(0));
} /**
* 测试实体类
* @author tbb
*
*/
public class Person{ private String userName;
private Integer age;
private Date endTime; public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
} } /**
* 日期格式化处理类
* @author tbb
*
*/
public static class DateJsonValueProcessor implements JsonValueProcessor{
//json数组日期转换
@Override
public Object processArrayValue(Object arg0, JsonConfig arg1) {
// TODO Auto-generated method stub
//判断是否是Date类型
if (arg0 instanceof Date){
String str = DateFormatUtils.format((Date)arg0, "yyyy-MM-dd");
return str;
}
return null;
}
//json对象日期转换
@Override
public Object processObjectValue(String arg0, Object arg1,
JsonConfig arg2) {
// TODO Auto-generated method stub
return DateFormatUtils.format((Date)arg1, "yyyy-MM-dd");
} } /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// doObject();
// demoDate();
// doJsonToString();
// doJsonObjectHandle();
getJsonArrayToString();
} }