content: package com.alibaba.json.bvt.ref;
  
  import java.util.Collections;
  import java.util.HashMap;
  import java.util.Map;
  
  import junit.framework.TestCase;
  
  import org.junit.Assert;
  
  import com.alibaba.fastjson.JSON;
  
  public class RefTest8 extends TestCase {
  
      public void test_bug_for_juqkai() throws Exception {
  
          C c = new C();
   
          Map<String, Object> a = Collections.<String,Object>singletonMap("c", c);
          Map<String, Object> b = Collections.<String,Object>singletonMap("c", c);
          Map<String, Object> vo = new HashMap<String, Object>();
          vo.put("a", a);
          vo.put("b", b);
  
          Object[] root = new Object[] { vo };
  
          String text = JSON.toJSONString(root);
          System.out.println(text);
  
          VO[] array2 = JSON.parseObject(text, VO[].class);
          Assert.assertEquals(1, array2.length);
          Assert.assertNotNull(array2[0].getA());
          Assert.assertNotNull(array2[0].getB());
          Assert.assertNotNull(array2[0].getA().getC());
          Assert.assertNotNull(array2[0].getB().getC());
          Assert.assertSame(array2[0].getA().getC(), array2[0].getB().getC());
      }
  
      private static class VO {
  
          private A a;
          private B b;
  
          public A getA() {
              return a;
          }
  
          public void setA(A a) {
              this.a = a;
          }
  
          public B getB() {
              return b;
          }
  
          public void setB(B b) {
              this.b = b;
          }
  
      }
  
      private static class A {
  
          private C c;
  
          public A(){
  
          }
  
          public A(C c){
              this.c = c;
          }
  
          public C getC() {
              return c;
          }
  
          public void setC(C c) {
              this.c = c;
          }
  
      }
  
      private static class B {
  
          private C c;
  
          public B(){
  
          }
  
          public B(C c){
              this.c = c;
          }
  
          public C getC() {
              return c;
          }
  
          public void setC(C c) {
              this.c = c;
          }
      }
  
      private static class C {
  
          public C(){
  
          }
  
      }
  }
  