From 3eaeea86f614be5cb128182731143859fbdda33a Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 20 Oct 2016 09:23:20 +0800 Subject: [PATCH] bug fixed for references. for jsonarray ref compute error. --- .../fastjson/parser/DefaultJSONParser.java | 6 ++++++ .../com/alibaba/json/bvt/ref/RefTest22.java | 17 +++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 src/test/java/com/alibaba/json/bvt/ref/RefTest22.java diff --git a/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java b/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java index 4a14b85d6..0b8d62265 100755 --- a/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java +++ b/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java @@ -467,6 +467,12 @@ public class DefaultJSONParser implements Closeable { : lexer.text.charAt(index)); } ArrayList list = new ArrayList(); + + final boolean parentIsArray = fieldName != null && fieldName.getClass() == Integer.class; + if (!parentIsArray) { + this.setContext(context); + } + this.parseArray(list, key); value = new JSONArray(list); if (innerMap != null) { diff --git a/src/test/java/com/alibaba/json/bvt/ref/RefTest22.java b/src/test/java/com/alibaba/json/bvt/ref/RefTest22.java new file mode 100644 index 000000000..dc349298d --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/ref/RefTest22.java @@ -0,0 +1,17 @@ +package com.alibaba.json.bvt.ref; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.parser.Feature; +import junit.framework.TestCase; + +/** + * Created by wenshao on 16/8/23. + */ +public class RefTest22 extends TestCase { + public void test_ref() throws Exception { + String json = "{\"name\":\"123\",\"assetSize\":{},\"items\":[{\"id\":123}],\"refItems\":{\"$ref\":\"$.items[0]\"}}"; + JSONObject root = JSON.parseObject(json); + assertSame(root.getJSONArray("items").get(0), root.getJSONObject("refItems")); + } +}