如果A对象持有B的引用,B对象持有A的引用,这样就形成了循环引用,如果直接使用json-lib转换,会报错:
net.sf.json.JSONException: There is a cycle in the hierarchy!
import java.util.HashSet;
import java.util.Set;
public class Aclass
{
private String name;
private int age;
private Set<Bclass> policyGoals = new HashSet<Bclass>();
public Aclass()
{
}
public Aclass(String name, int age)
{
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public Set<Bclass> getPolicyGoals()
{
return policyGoals;
}
public void setPolicyGoals(Set<Bclass> policyGoals)
{
this.policyGoals = policyGoals;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
@Override
public String toString()
{
return name + "----" + age;
}
public class Bclass
{
private String sex;
private int address;
private Aclass aclass;
public Bclass()
{
}
public String getSex()
{
return sex;
}
public void setSex(String sex)
{
this.sex = sex;
}
public int getAddress()
{
return address;
}
public void setAddress(int address)
{
this.address = address;
}
public Aclass getAclass()
{
return aclass;
}
public void setAclass(Aclass aclass)
{
this.aclass = aclass;
}
}
public static void main(String[] args) throws Exception
{
Aclass aObj = new Aclass();
aObj.setName("xiu");
aObj.setAge(20);
// cretae b
Bclass bObj = new Bclass();
bObj.setSex("girl");
bObj.setAddress(100);
bObj.setAclass(aObj);
aObj.getPolicyGoals().add(bObj);
JsonConfig jsonConfig = new JsonConfig();
// jsonConfig.setExcludes(new String[]{"bclass"});
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
JSONObject jsonObj = JSONObject.fromObject(aObj,jsonConfig);
System.out.println(jsonObj.toString());
}