java - 使用 jackson 将 java 对象转换为 json 字符串时重复 json 属性

标签 java json properties duplicates jackson

我有 Pojo 对象,使用 getAsJson 函数返回该对象的 Json 字符串。 我使用 JsonProperty 在此对象中定义 json 属性。 使用 ObjectMapper 的 writeValueAsString 为该对象写入 json 字符串。

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

@JsonIgnoreProperties(ignoreUnknown=true)
public class LogLikeArticleDetail extends BaseObject {
    private static final long serialVersionUID = -2018373118257019033L;
    @JsonProperty("LikeArticleGUId")
    private String likeArticleGUId;
    @JsonProperty("UserId")
    private String userID;
    @JsonProperty("UserName")
    private String userName;
    @JsonProperty("IP") 
    private String ip;
    @JsonProperty("OS") 
    private String os;
    @JsonProperty("UserAgent") 
    private String userAgent;
    @JsonProperty("WebsiteCode") 
    private String websiteCode;
    @JsonProperty("ArticleId") 
    private String articleID;
    @JsonProperty("ATitle") 
    private String aTitle;
    @JsonProperty("CateAlias") 
    private String cateAlias;
    @JsonProperty("LikeStatus") 
    private String likeStatus;
    @JsonProperty("TimeStamp") 
    private Date timeStamp;
        //get, set....
        //....
        @JsonIgnore
    public String getAsJSON() throws JsonGenerationException, JsonMappingException,    IOException{
        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(this) ; 
    }
}

现在,我得到了结果

public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
        Calendar calendar =  Calendar.getInstance();
        LogLikeArticleDetail logLikeArticle = new LogLikeArticleDetail("1","2","3","4","5","6","7","8","what thing \"nothing\" show","10","11",calendar.getTime());
        System.out.println(logLikeArticle.getAsJSON());
    }

但是结果的重复属性:

{"LikeArticleGUId":"1","UserId":"2","UserName":"3","IP":"4","OS":"5","UserAgent":"6","WebsiteCode":"7","ArticleId":"8","ATitle":"what thing \"nothing\" show","CateAlias":"10","LikeStatus":"11","TimeStamp":1352256727062,"_likeArticleGUId":"1","websiteCode":"7","likeStatus":"11","userID":"2","userName":"3","ip":"4","os":"5","userAgent":"6","articleID":"8","aTitle":"what thing \"nothing\" show","cateAlias":"10","timeStamp":1352256727062}

告诉我这个问题发生了什么?

最佳答案

所以我遵循: how to specify jackson to only use fields - preferably globally

我加

@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)

之前

public class LogLikeArticleDetail extends BaseObject

以及我想要的结果。

那么另一个可以在 getAsJson() 函数中解决这个问题,例如:

ObjectMapper mapper  = new ObjectMapper();
mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
                .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
return mapper.writeValueAsString(this) ;

感谢@Sean Carpenter 的问题和@kmb385 在上面的链接中的回答。

关于java - 使用 jackson 将 java 对象转换为 json 字符串时重复 json 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13262662/

相关文章:

php - json_encode() 转义正斜杠

javascript - 无法解决错误 "Uncaught SyntaxError: Unexpected token o "

java - XML 到 JSON 转换问题

java - 在java属性文件中使用字符实体

java - 如何使用Java属性文件来定义对象并为对象设置属性?

java - JProfiler : knowing which method is calling for java objects

java - 从卡的 toString() 获取错误的字符串

Java 组合框的不安全操作

java - JPA 实体扩展类包含@Id

java - 属性文件字符串长度限制(JAVA)