Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AfterFilter附加对象时$ref引用出现null属性名($ref: "$.data[0].null") #3150

Closed
supenBenny opened this issue May 8, 2020 · 3 comments
Milestone

Comments

@supenBenny
Copy link

supenBenny commented May 8, 2020

category:是通过AfterFilter加入的
category2:对象本身定义的属性

image

serializer.writeKeyValue(seperator, key, value);

  protected final void writeKeyValue(char seperator, String key, Object value) {
        if (seperator != '\0') {
            out.write(seperator);
        }
        out.writeFieldName(key);
        write(value);
    }

JSONSerializer.write 方法未传递fieldName,此处可以改为writeWithFieldName

image

最终JSONSerializer.setContext 时fieldName为空。

@wenshao
Copy link
Member

wenshao commented May 10, 2020

能否提供一个重现问题的testcase

@supenBenny
Copy link
Author

能否提供一个重现问题的testcase

RefAfterFilterTest.zip
已提供RefAfterFilterTest.main,执行结果
[{"category":{"name":"category"},"name":"item1","afterFilterCategory":{"name":"afterFilterCategory"}},{"category":{"$ref":"$[0].category"},"name":"item2","afterFilterCategory":{"$ref":"$[0].null"}}]

@supenBenny
Copy link
Author

@wenshao 另外一个问题由于当前线程变量serializerLocal置空引发的

RefAfterFilterTest-null.zip
Exception in thread "main" java.lang.NullPointerException at com.alibaba.fastjson.serializer.AfterFilter.writeKeyValue(AfterFilter.java:24) at com.alibaba.fastjson.serializer.RefAfterFilterTest.writeAfter(RefAfterFilterTest.java:27) at com.alibaba.fastjson.serializer.AfterFilter.writeAfter(AfterFilter.java:16) at com.alibaba.fastjson.serializer.JavaBeanSerializer.writeAfter(JavaBeanSerializer.java:834)

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants