首页 > 解决方案 > 无法理解 ObjectMapper writeValueAsString(Object value) 方法的行为

问题描述

ObjectMapper用来获取价值StringJsonNode但看到这种奇怪的行为。我在这里遗漏了一些东西。有人可以解释为什么实际结果double quotes中有吗?我希望这个测试通过,但断言失败:

单元测试:

@Test
public void testGetValueAsString() throws JsonProcessingException {
  ObjectMapper fasterXmlMapper = new com.fasterxml.jackson.databind.ObjectMapper();
  JsonNode node = new TextNode("{}");
  String valueAsString = fasterXmlMapper.writeValueAsString(node);
  assertEquals("{}", valueAsString);
}

测试运行输出:

expected:<[{}]> but was:<["{}"]>
Expected :{}
Actual   :"{}"

在这里,我指的是以下库和类:

我在用jackson-databind-2.9.9.jar

com.fasterxml.jackson.databind.JsonNodecom.fasterxml.jackson.databind.ObjectMapper

标签: javajsonjacksonjackson-databind

解决方案


您可以在json.org上阅读string

字符串是零个或多个 Unicode 字符的序列, 双引号括起来,使用反斜杠转义。字符表示为单个字符串。字符串与 C 或 Java 字符串非常相似。

这就是这样com.fasterxml.jackson.databind.node.TextNode做的,{}用双引号括起来给出"{}".

如果你想有一个空的JSON Object,你可以创建com.fasterxml.jackson.databind.node.ObjectNode实例:

JsonNode node = mapper.getNodeFactory().objectNode();

推荐阅读