package com.alibaba.json.bvt.bug; import org.junit.Assert; import junit.framework.TestCase; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; public class Bug_for_zhuel extends TestCase { public void test_for_zhuel() throws Exception { Person[] ps = new Person[3]; Person p1 = new Person(); p1.setAge(50); p1.setHight("170"); p1.setId("p1's id"); p1.setName("person1's name"); p1.setNames(new String[] { "p1's id", "person1's name" }); p1.setSex("男"); Person p2 = new Person(); p2.setAge(48); p2.setHight("155"); p2.setId("p2's id"); p2.setName("person2's name"); p2.setNames(new String[] { "p2's id", "person2's name" }); p2.setSex("女"); Person p3 = new Person(); p3.setAge(10); p3.setHight("120"); p3.setId("p3's id "); p3.setName("son's name"); p3.setNames(new String[] { "p3's id ", "son's name" }); p3.setSex("男"); ps[0] = p1; ps[1] = p2; ps[2] = p3; Person[] ps1 = new Person[3]; Person pp1 = new Person(); pp1.setAge(52); pp1.setHight("170"); pp1.setId("pp1's id"); pp1.setName("personpp1's name"); pp1.setNames(new String[] { "pp1's id", "personpp1's name" }); pp1.setSex("男"); Person pp2 = new Person(); pp2.setAge(49); pp2.setHight("150"); pp2.setId("pp2's id"); pp2.setName("personpp2's name"); pp2.setNames(new String[] { "pp2's id", "personpp2's name" }); pp2.setSex("女"); Person pp3 = new Person(); pp3.setAge(10); pp3.setHight("125"); pp3.setId("pp3's id"); pp3.setName("daughter's name"); pp3.setNames(new String[] { "pp3's id", "daughter's name" }); pp3.setSex("女"); ps1[0] = pp1; ps1[1] = pp2; ps1[2] = pp3; Person[] ps2 = new Person[3]; Person a1 = new Person(); a1.setAge(52); a1.setHight("170"); a1.setId("a1's id"); a1.setName("a1's name"); a1.setNames(new String[] { "a1's id", "a1's name" }); a1.setSex("男"); Person a2 = new Person(); a2.setAge(49); a2.setHight("150"); a2.setId("a2's id"); a2.setName("a2's name"); a2.setNames(new String[] { "a2's id", "a2's name" }); a2.setSex("女"); Person a3 = new Person(); a3.setAge(10); a3.setHight("125"); a3.setId("a3's id"); a3.setName("daughter's name"); a3.setNames(new String[] { "a3's id", "daughter's name" }); a3.setSex("女"); ps2[0] = a1; ps2[1] = a2; ps2[2] = a3; Family f1 = new Family(); f1.setId("f1's id"); f1.setAddress("f1's address"); f1.setChildrennames(new String[] { "p1's name", "p2's name", "p3's name" }); f1.setIncome(100000000); f1.setMaster(p1); f1.setName("person1's home"); f1.setPs(ps); f1.setTest(1994.08); Family f2 = new Family(); f2.setId("f2's id"); f2.setAddress("f2's address"); f2.setChildrennames(new String[] { "pp1's name", "pp2's name", "pp3's name" }); f2.setIncome(100000000); f2.setMaster(pp1); f2.setName("personpp1's home"); f2.setPs(ps1); Family f3 = new Family(); f3.setId("f3's id"); f3.setAddress("f3's address"); f3.setChildrennames(new String[] { "a1's name", "a2's name", "a3's name" }); f3.setIncome(100000000); f3.setMaster(a1); f3.setName("a1's home"); f3.setPs(ps2); f3.setTest(1995.08); Family[] fs = new Family[3]; fs[0] = f1; fs[1] = f2; fs[2] = f3; System.out.println(JSON.VERSION); String sfs = JSON.toJSONString(fs, true); Assert.assertSame(fs[0].getMaster(), fs[0].getPs()[0]); System.out.println(sfs); { Family[] result = JSON.parseObject(sfs, Family[].class); Assert.assertSame(result[0].getMaster(), result[0].getPs()[0]); Assert.assertSame(result[1].getMaster(), result[1].getPs()[0]); Assert.assertSame(result[2].getMaster(), result[2].getPs()[0]); } { JSONArray array = JSON.parseArray(sfs); for (int i = 0; i < array.size(); ++i) { JSONObject jsonObj = array.getJSONObject(i); Assert.assertSame(jsonObj.get("master"), jsonObj.getJSONArray("ps").get(0)); } } } public static class Family { private String id; private String name; private Person[] ps; private String address; private String[] childrennames; private Person master; private long income; private double test; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Person[] getPs() { return ps; } public void setPs(Person[] ps) { this.ps = ps; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String[] getChildrennames() { return childrennames; } public void setChildrennames(String[] childrennames) { this.childrennames = childrennames; } public Person getMaster() { return master; } public void setMaster(Person master) { this.master = master; } public long getIncome() { return income; } public void setIncome(long income) { this.income = income; } public double getTest() { return test; } public void setTest(double test) { this.test = test; } } public static class Person { private String id; private String name; private String sex; private int age; private String[] names; private String hight; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String[] getNames() { return names; } public void setNames(String[] names) { this.names = names; } public String getHight() { return hight; } public void setHight(String hight) { this.hight = hight; } } }