从 JSON 字符串中删除反斜杠

问题描述 投票:0回答:2

我有一个类型的对象:

RestConsumerRequest<RewardsAccumulationRequest>

其中有@JsonProperty注释字段,例如:

@JsonProperty("product_code")
private String productCode;

@JsonProperty("sub_product_code")
private String subProductCode;

当我使用以下方法将其写为字符串时:

LOG.info("RestConsumerRequest<RewardsAccumulationRequest> is {}", objectMapper.writeValueAsString(restRequest))

我得到了:

..., \"product_code\":\"CSS\",\"sub_product_code\":\"SC\",...

我尝试用以下方法删除反斜杠:

objectMapper.writeValueAsString(restRequest).replace("\\","") 

反弹依然存在。

如果我使用replaceAll:

LOG.info("RestConsumerRequest<RewardsAccumulationRequest> is {}", objectMapper.writeValueAsString(restRequest).replaceAll("\\\"", ""));

然后所有 \" 都消失了(没有任何引号)

..., product_code:CSS,sub_product_code:SC,...

仅删除反斜杠并保留正确引用的 JSON 的正确方法是什么?我想一定有更聪明的方法来做到这一点,例如 objectMapper 的一些配置。

java json jackson
2个回答
0
投票

我使用了下面的代码,打印如下。
22:10:41.743 [主要] 信息 com.example.SpringBootDemo_3_3_0.JsonPrinting -- {"product_code":"productCode","sub_product_code":"subProduct"}

公共类 JsonPrinting {

private static Logger logger = LoggerFactory.getLogger(JsonPrinting.class);

public static void main(String[] args) throws JsonProcessingException {

    ObjectMapper objectMapper = new ObjectMapper();
    RewardsAccumulationRequest request = new RewardsAccumulationRequest("productCode", "subProduct");
    //System.out.println(objectMapper.writeValueAsString(request));
    logger.info(objectMapper.writeValueAsString(request));
}

}

类 RewardsAccumulationRequest 实现可序列化 {

public RewardsAccumulationRequest(String productCode, String subProductCode) {
    this.productCode = productCode;
    this.subProductCode = subProductCode;
}

@JsonProperty("product_code")
private String productCode;

@JsonProperty("sub_product_code")
private String subProductCode;

}


0
投票

您实际上不需要删除反斜杠,因为它们不是 JSON 本身的一部分 - 它们只是在打印输出时转义字符串中的引号。如果您想以更易读的格式查看 JSON,而不使用所有这些反斜杠,您可以调整 ObjectMapper 来为您漂亮地打印 JSON。

具体操作方法如下:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);

String jsonString = objectMapper.writeValueAsString(restRequest);
LOG.info("RestConsumerRequest<RewardsAccumulationRequest> is {}", jsonString);

输出将是一个更漂亮的 json :

{
"product_code": "CSS",
"sub_product_code": "SC"
}
© www.soinside.com 2019 - 2024. All rights reserved.