private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public static void main(String[] args) throws ParseException {
JsonTest jt = new JsonTest();
jt.setAge("14");
jt.setName("zhangsan");
//对象转字符串类型的json
String st=JSONObject.fromObject(jt).toString();
System.out.println(st);//打印结果:{"age":"14","name":"zhangsan"}
}
}
- {"nanos":0,"time":-27076233600000,"minutes":0,"seconds":0,"hours":0,"month":11,"timezoneOffset":-480,"year":-789,"day":5,"date":22}
而这种格式肯定是非常难以理解的,为了将Date转换为我们认识的“yyyy-MM-dd”格式,需要做以下操作。
首先创建一个时间转换器必须实现JsonValueProcessor接口
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
public class JsonDateValueProcessor implements JsonValueProcessor {
private String format = "yyyy-MM-dd";
public JsonDateValueProcessor() {
super();
}
public JsonDateValueProcessor(String format) {
super();
this.format = format;
}
@Override
public Object processArrayValue(Object paramObject, JsonConfig paramJsonConfig) {
return process(paramObject);
}
@Override
public Object processObjectValue(String paramString, Object paramObject, JsonConfig paramJsonConfig) {
return process(paramObject);
}
private Object process(Object value) {
if (value instanceof Date) {
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.CHINA);
return sdf.format(value);
}
return value == null ? "" : value.toString();
}
}
然后在调用JSONObject之前创建一个JsonConfig,并且将上一步定义的date转换器注册进去:
Java代码
- JsonConfig jsonConfig = new JsonConfig();
- jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
最后将JsonConfig放入JSONObject对象中,这里针对不同的数据类型有多种方式放入JsonConfig:
- JSONObject json = new JSONObject();
- //Map转JSON
- json.putAll(Map, jsonConfig);
或者
- JSONObject json = new JSONObject();
- //JavaBean转JSON
- json.fromObject(object, jsonConfig)
最后我们看到的结果就是只要JavaBean中有Date对象,转换成JSON字符串时就会变成“yyyy-MM-dd”格式
例如
public class JsonTest {
private String name;
private String age;
private Date date;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public static void main(String[] args) {
JsonTest jt = new JsonTest();
jt.setAge("14");
jt.setName("zhangsan");
jt.setDate(new Date());
//对象转字符串类型的json
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
String st=JSONObject.fromObject(jt,jsonConfig).toString();
System.out.println(st);//打印结果:{"age":"14","date":"2018-01-17","name":"zhangsan"}
}
}
json类型的字符串转对象类型:
public class JsonTest {
private String name;
private String age;
private Date date;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public static void main(String[] args) {
String str = "{\"age\":\"14\",\"date\":\"2018-01-17\",\"name\":\"zhangsan\"}";
//先把string转为json
JSONObject jsoStr = JSONObject.fromObject(str);
JsonTest jsobj = (JsonTest) JSONObject.toBean(jsoStr, JsonTest.class);
System.out.println(jsobj.getName());
}
}
json格式的字符转换为 list 对象
String str = "[{\"age\":\"14\",\"date\":\"2018-01-17\",\"name\":\"zhangsan\"},{\"age\":\"15\",\"date\":\"2018-05-17\",\"name\":\"lisi\"}]";
//先把string转为json
JSONArray jsoStr = JSONArray.fromObject(str);
List<JsonTest> jsobj =( List<JsonTest>)JSONArray.toCollection(jsoStr,JsonTest.class);
for(int i=0;i<jsobj.size();i++){
String age=jsobj.get(i).getAge();
System.out.println(age);
}
collection转为字符串
public static String array2json(Collection<?> coll) {
JSONArray jsonArray = JSONArray.fromObject(coll, jsonConfig);
return jsonArray.toString();
}