jackson objectNode获取查询

时间:2014-03-25 16:49:04

标签: playframework playframework-2.0 jackson

我正在使用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"

我想避免使用字符串操作来解析值 - 即使我使用数据绑定路由,也必须有更好的方法。

1 个答案:

答案 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