2014-03-25 5 views
0

Я использую jackson objectNode (в play2.2). Я могу поставить значение строки в objectNode так:jackson objectNode получить запрос

objectNode test = Json.newObject(); 
test.put("check", "stackoverflow"); 

Когда я пытаюсь получить значение с помощью операции GET, я не могу использовать равный правильно. Я угадываю его, потому что значение String имеет дополнительные символы (инвертированные запятые). В этом случае наилучший подход к использованию равен тому, что строка хранится в объектеNode (это использует параметр dataBind в jackson).

test.get("check").equals("stackoverflow"); // neither works 
    test.get("check").toString().equals("stackoverflow"); 

Когда я распечатать значение, можно увидеть следующее значение т.е. с кавычками:

"stackoverflow" 

Я хотел бы, чтобы избежать использования строковых операций для разбора из значения - должно быть лучший способ, даже если я использую маршрут привязки данных.

ответ

0

Необходимо сравнить объекты с подходящими типами. Метод ObjectNode.get() возвращает экземпляр 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 
Смежные вопросы