From 985dc4905de394ed7197ff1641871fbf261f6fa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=7B=E6=9D=8E=E5=BD=A6=E6=85=A7=7D=28=7B026834=7D=29?= Date: Wed, 19 Nov 2014 11:38:21 +0800 Subject: [PATCH] bugfix for json and json array --- .../deserializer/JavaBeanDeserializer.java | 4 ++ .../json/bvt/bug/Bug_for_json_array.java | 56 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 src/test/java/com/alibaba/json/bvt/bug/Bug_for_json_array.java diff --git a/src/main/java/com/alibaba/fastjson/parser/deserializer/JavaBeanDeserializer.java b/src/main/java/com/alibaba/fastjson/parser/deserializer/JavaBeanDeserializer.java index 141e861ec..90e30604c 100755 --- a/src/main/java/com/alibaba/fastjson/parser/deserializer/JavaBeanDeserializer.java +++ b/src/main/java/com/alibaba/fastjson/parser/deserializer/JavaBeanDeserializer.java @@ -169,6 +169,10 @@ public class JavaBeanDeserializer implements ObjectDeserializer { @SuppressWarnings("unchecked") public T deserialze(DefaultJSONParser parser, Type type, Object fieldName, Object object) { + if (type == JSON.class || type == JSONObject.class) { + return (T) parser.parse(); + } + final JSONLexer lexer = parser.getLexer(); // xxx if (lexer.token() == JSONToken.NULL) { diff --git a/src/test/java/com/alibaba/json/bvt/bug/Bug_for_json_array.java b/src/test/java/com/alibaba/json/bvt/bug/Bug_for_json_array.java new file mode 100644 index 000000000..acc43caef --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/bug/Bug_for_json_array.java @@ -0,0 +1,56 @@ +package com.alibaba.json.bvt.bug; + +import junit.framework.TestCase; + +import com.alibaba.fastjson.JSON; + +public class Bug_for_json_array extends TestCase { + + public void test_bug() throws Exception { + String jsonStr = "{\"state\":0,\"data\":[{\"items\":[{\"tip\":\"\u5218\u82e5\u82f1\",\"url\":\"xiami:\\/\\/artist\\/1930\"},{\"tip\":\"\u5218\u5fb7\u534e\",\"url\":\"xiami:\\/\\/artist\\/648\"}],\"type\":\"artist\"},{\"items\":[{\"tip\":\"\u6f02\u6d0b\u8fc7\u6d77\u6765\u770b\u4f60 (Live) - \u5218\u660e\u6e58\",\"url\":\"xiami:\\/\\/song\\/1773431302\"},{\"tip\":\"\\u6211\\u4eec\\u6ca1\\u6709\\u5728\\u4e00\\u8d77 - \\u5218\\u82e5\\u82f1\",\"url\":\"xiami:\\/\\/song\\/1769471863\"},{\"tip\":\"\\u54ed\u7802 (Live)(\\u5218\\u660e\\u6e58\\u80dc\\u51fa) - \\u5218\u660e\u6e58\",\"url\":\"xiami:\\/\\/ song\\/1773484887\"}],\"type\":\"song\"},{\"items\":[{\"tip\":\"\\u4eb2\\u7231\\u7684\\u8def\\u4eba - \\u5218\\u82e5\\u82f1\",\"url\":\"xiami:\\/\\/album\\/55230\"},{\"tip\":\"\\u5728\\u4e00\\u8d77 - \\u5218\\u82e5\\u82f1\",\"url\":\"xiami:\\/\\/album\\/377241\"}],\"type\":\"album\"}],\"status\":\"ok\",\"err\":null} "; + + Parser parser = JSON.parseObject(jsonStr, Parser.class); + + System.out.println(JSON.toJSONString(parser)); + } + + public static class Parser { + + public int state; + public JSON data; + public String status; + public String err; + + public int getState() { + return state; + } + + public void setState(int state) { + this.state = state; + } + + public JSON getData() { + return data; + } + + public void setData(JSON data) { + this.data = data; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getErr() { + return err; + } + + public void setErr(String err) { + this.err = err; + } + } +} \ No newline at end of file