我正在使用jackson objectNode(在play2.2中)。我可以在objectNode中放置一个字符串值,如下所示:
objectNode test = Json.newObject();
test.put("check", "stackoverflow");
当我尝试使用get操作检索值时,我似乎无法正确使用equals。我猜测它是因为String值有其他字符(引号为倒数) - 在这种情况下,对于存储在objectNode中的字符串(这是在jackson中使用dataBind选项),使用equals的最佳方法是什么。 / p>
test.get("check").equals("stackoverflow"); // neither works
test.get("check").toString().equals("stackoverflow");
当我打印出值时,我可以看到以下值,即带有引号:
"stackoverflow"
我想避免使用字符串操作来解析值 - 即使我使用数据绑定路由,也必须有更好的方法。
答案 0 :(得分:0)
您应该将对象与适当的类型进行比较。 ObjectNode.get()方法返回一个不能等于string的JsonNode实例。而JsonNode.toString()方法返回字符串节点的引用JSON表示,该表示不等于原始字符串。
您应该将JSON节点的文本上下文与输入字符串或JsonNode对象进行比较。这是一个例子:
public class JacksonObjectNode {
public static class MyObject {
public String value;
public MyObject(String value) {
this.value = value;
}
}
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
MyObject object = new MyObject("foo");
ObjectNode node = mapper.convertValue(object, ObjectNode.class);
JsonNode stringNode = mapper.convertValue("foo", JsonNode.class);
System.out.println("ObjectNode.get(...) == 'foo' = " +
node.get("value").equals("foo"));
System.out.println("ObjectNode.get(...).toString() == 'foo' = " +
node.get("value").toString().equals("foo"));
System.out.println("ObjectNode.get(...).asText == 'foo' = " +
node.get("value").asText().equals("foo"));
System.out.println("ObjectNode.get() == JsonNode = " +
node.get("value").equals(stringNode));
}
}
输出:
ObjectNode.get(...) == 'foo' = false
ObjectNode.get(...).toString() == 'foo' = false
ObjectNode.get(...).asText == 'foo' = true
ObjectNode.get() == JsonNode = true