一,json注意事项:
1,转化为json格式是针对于对象的,默认java类的静态属性是不能转化为json格式的。但是,如果java对象,不论其实例变量,还是静态变量,如果想转化为json格式,都必须有相应的实例的setter和getter方法。java对象的属性转化为json格式的过程是根据其对象中的实例变量来判断的,并且转化哪个属性是根据实例属性的set和get方法的而不是根据属性名。
特别注意:当然也可以自己定义map或者符合json格式的对象或者通过JSONObject类创建json对象来进行json格式转换!!!
2,在java项目中,java对象转化为json格式,需要依赖几个jar包:
commons-beanutils-1.7.0.jar
commons-collections-3.2.jar
commons-lang.jar
commons-logging-1.1.jar
ezmorph-1.0.4.jar
json-lib-2.2.2-jdk15.jar
struts2-json-plugin-2.3.4.jar(整合struts2的时候需要导入)
3,struts2整合json:
(1)上面的jar包得全部导入
(2)struts.xml配置文件中的的package得继承json-default,并且结果返回类型为json。并且返回result的参数<param name="root">要转化为json格式对象的java对象</param>
(3)要转化Wiejson格式的对象在action中必须有getter和setter方法
二,转化为json格式对象时的------------------------自关联问题
import java.util.Date;
public class Student {
private String name;
private Date date;
private Student student=this;//自关联
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
private static Integer age;
public static Integer getAge() {
return age;
}
public static void setAge(Integer age) {
Student.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
三,通过自定义日期的处理类,来格式化转化为json对象的日期格式
@Test//通过自定义日期的处理类,来格式化转化为json对象的日期格式
public void test5() {
student.setDate(new Date());
student.setName("aaa");
JsonConfig config=new JsonConfig();//转化为json对象的配置器,
config.registerJsonValueProcessor(Date.class, new DataJsonValueProcessor());
<span style="white-space:pre"> </span>//给json对象配置器注册一个类型转换器,来格式化特定类型以一种特定方法转化为json对象
<span style="white-space:pre"> </span>第二个参数需要实现一个JsonValueProcessor接口
System.out.println(JSONObject.fromObject(student, config));
}
<strong><span style="font-size:18px;">import java.text.SimpleDateFormat;
import java.util.Date;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
public class DataJsonValueProcessor implements JsonValueProcessor {
private String format="yyyy-MM-dd HH:mm:ss";
private SimpleDateFormat sdf=new SimpleDateFormat(format);
@Override
public Object processArrayValue(Object arg0, JsonConfig arg1) {
return null;
}
@Override
public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) {
if(arg1==null){
return "";
}else if(arg1 instanceof Date){
return sdf.format(arg1);
}else{
return arg1.toString();
}
}
}</span></strong>
四,JSONObject自定义json格式对象 JSONArray自已定义json格式对象数组
JSONObject o=new JSONObject();
o.put("id", 123);
o.put("name", "bbbb");
JSONObject o2=new JSONObject();
o2.put("id", 234);
o2.put("name", "CCCC");
JSONArray a=new JSONArray();
a.add("a1");
a.add("a2");
JSONObject t=new JSONObject();
t.put("a", a);
t.put("o1", o);
t.put("o2", o2);
System.out.println(JSONObject.fromObject(t));