我有一个类型的对象:
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 的一些配置。
我使用了下面的代码,打印如下。
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;
}
您实际上不需要删除反斜杠,因为它们不是 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"
}