当前位置: 首页 > 知识库问答 >
问题:

JSON Jackson未忽略空字段[重复]

丰誉
2023-03-14
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Items {

    /**
* 
*/
    @JsonProperty("items")
    private List<Item> items = new ArrayList<Item>();
    private Map<String, Object> additionalProperties =
            new HashMap<String, Object>();

    /**
     * 
     * @return
     *         The items
     */
    @JsonProperty("items")
    public List<item> getItems() {
        return items;
    }

    /**
     * 
     * @param items
     *            The items
     */
    @JsonProperty("items")
    public void setitems(List<Item> items) {
        this.items = items;
    }

    @JsonAnyGetter
    @JsonUnwrapped
    public Map<String, Object> getAdditionalProperties() {
        return this.additionalProperties;
    }

    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
    }
  }
 {    "items": [
            {...}],

        "additionalProperties": { } // I expect this to be removed.
    }

知道我做错了什么吗?如果重要的话,我将使用Jackson-core 2.1.1。

共有1个答案

楚嘉胜
2023-03-14

您需要在类级别上添加它@jsonInclude(include.non_empty)

下面的代码对我来说很好用

public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
    String [] characteristics = new String[]{};
    Employee emp = new Employee("John", "20", "Male", characteristics);
    ObjectMapper mapper = new ObjectMapper();
    mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_EMPTY);
    mapper.writeValue(System.out, emp);
}
class Employee {
    String name;
    String age;
    String gender;
    String [] characteristics;
    //setters and getters
    }

输出:{“姓名”:“John”,“年龄”:“20”,“性别”:“Male”}

 类似资料:
  • 问题内容: 在成功提交用户详细信息时,我从客户端获得了JSON。 由于未更新JSON中的某些元素,因此可以跳过。 在Go服务器端,我定义了一个等效的结构。 服务器成功将JSON字节编组到结构中。 但是对于未从客户端接收到的字段,默认情况下取消对字符串的硬编码解组为nil,对字符串数组解压缩为空数组。 例如,如果我获取json , 则不希望由元帅将其转换为。 简单起见,我希望它是 如何完全忽略该字段

  • 问题内容: 我有一些必须序列化为JSON的数据。我正在使用JSON.NET。我的代码结构与此类似: 问题是,我的JSON输出需要具有ON OR 或ON- 取决于所使用的字段(即不为null)。默认情况下,我的JSON如下所示: 我知道我可以使用,但这给了我如下所示的JSON: 我需要的是: 有没有简单的方法可以做到这一点? 问题答案: 是的,您需要使用。 但是由于结构是值类型,因此您需要将Fiel

  • 我的应用程序中有一个接受日志的控制器。当我发送一个空的json对象(“{}”)或有效请求,但有一个或多个空字段时,它会自动反序列化为一个空的LogDTO对象或一个字段设置为0(对于数字字段)的LogDTO。我想拒绝字段为空的请求。 我的控制器: LogDTO对象: 我也尝试在我的应用程序属性中设置“spring.jackson.default-属性-包含=非默认”,但它一直将字段设置为“0”。有什

  • 如果包含一个与之匹配的值,则一切正常。 从返回 如果片段不存在,AbstractStandardFragmentInsertionTagProcessor#ComputeFragment似乎总是失败。 我对Thymeleaf很陌生,所以我可能错过了一些相当基本的东西。

  • 我有一个问题。 然后在第二类中,即使我没有使用第二个字段,它仍然被添加为NULL。 我怎样才能避免这种情况呢?

  • 我有这个Pojo: 这是我的结果集映射器: 如何从数据库中少取一列。例如,在一些查询中,我只获取tagUuid和name,而不获取其他字段。但是如果我这样做,我会得到一个例外:org.skife.jdbi.v2.exceptions。ResultSetException:尝试遍历结果集时引发异常。我试图创建一个没有其他参数的附加标记构造函数。 这是我尝试运行的查询: