java - 使用 Jackson 将 map 序列化为 json 而不在输出中显示 map 名称

标签 java json jackson

我需要为休息服务显示以下类型的 Json 响应:

{
    "Server up": false,
    "database running": true,
    "dependency 1 up": true
}

为此,我定义了具有映射字段的 Java 对象 HealthCheckResponse.java。

public class HealthCheckResponse {
    @JsonProperty
    private Map<String, Boolean> statusMap;

    public Map<String, Boolean> getStatusMap() {
        return statusMap;
    }
    public void setStatusMap(Map<String, Boolean> statusMap) {
        statusMap = statusMap;
    }}

但是当我打印最终响应时, map 字段的名称也会出现在其中。

{
   "statusMap":
   {
       "Server up": false,
"database running": true,
"dependency 1 up": true
   }
}

请建议我需要在 HealthCheckResponse.java 中进行哪些更改,以摆脱输出显示中的“statusMap”和多余的花括号。 这是我正在使用的对象映射器:

public class CustomObjectMapper extends ObjectMapper {

    public CustomObjectMapper() {
        super();

        configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

        setVisibilityChecker(getSerializationConfig().getDefaultVisibilityChecker().withFieldVisibility(JsonAutoDetect.Visibility.NONE)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE).withSetterVisibility(JsonAutoDetect.Visibility.NONE)
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE).withIsGetterVisibility(JsonAutoDetect.Visibility.NONE));

        setSerializationInclusion(Include.NON_NULL);

        registerModule(new StringModule());
        registerModule(new GuavaModule());
    }
}

最佳答案

我相信 @JsonValue 在这里可以提供帮助。如果您更改对以下内容的回复:

public class HealthCheckResponse {
    private Map<String, Boolean> statusMap;

    @JsonValue
    public Map<String, Boolean> getStatusMap() {
        return statusMap;
    }

    public void setStatusMap(Map<String, Boolean> statusMap) {
        this.statusMap = statusMap;
    }
}

// The mapper can be used like this
final ObjectMapper mapper = new ObjectMapper();

// The POJO
final HealthCheckResponse healthCheckResponse = new HealthCheckResponse();
final Map<String, Boolean> statusMap = new HashMap<>();
statusMap.put("Server up", false);
statusMap.put("database running", true);
statusMap.put("dependency 1 up", true);
healthCheckResponse.setStatusMap(statusMap);

System.out.println(mapper.writeValueAsString(healthCheckResponse));

并且,输出将是:

{"Server up":false,"database running":true,"dependency 1 up":true}

关于java - 使用 Jackson 将 map 序列化为 json 而不在输出中显示 map 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27977437/

相关文章:

java - Spring MVC Fileupload - 如何在基于 XML 的应用程序中设置 MultipartConfigElement?

java - ReSTLet 作为独立应用程序的优势?

java - 为什么我们不能在 Java 中使用指针?

c# - 使用 Json.NET 序列化时忽略特定数据类型?

java - 如何在 Jersey Trace 中打印漂亮的 JSON?

c# - 更改 JSON 文件中的值(写入文件)

java - 将 YAML 反序列化为 JAVA

java - http 调用期间特定类的对象映射器映射

java - 将 HTTP 请求数据转换为枚举时捕获异常

java - 如何在 apache BasicDataSource 中使用加密密码?