2014-02-08 3 views
2

Это, вероятно, один из тех вопросов, где заголовок говорит все.json string к объекту Java с Jackson

Я очень увлечен методом ObjectMapper readValue(file, class), который находится в библиотеке Джексона, который читает строку json из файла и присваивает ее объекту.

Мне любопытно, если это можно сделать, просто получив json из строки и применив ее к объекту.

Какой-то альтернативный метод readValue(), который принимает STRING, а не файл и присваивает его объекту?

Например, в то время как метод по умолчанию readValue(file, class) выглядит следующим образом:

ObjectMapper mapper = new ObjectMapper(); 
Student student = mapper.readValue("C:\\student.json", Student.class); 

мне было интересно, есть ли какой-то способ в Джексоне, что позволило следующее:

ObjectMapper mapper = new ObjectMapper(); 
Student student = mapper.readValue("{\"id\":100,\"firstName\":\"Adam\"}", Student.class); 

Второй пример принимает строка и объект класса, а первый - файл и объект класса.

Я просто хочу вырезать среднего человека, в данном случае, файла.

Является ли это выполнимым, или такой метод не существует в рамках ограничений Джексона?

+2

Пожалуйста, прочтите [Javadoc] (http://fasterxml.github.io/jackson-databind/javadoc/2.1.0/com/fasterxml/jackson/databind/ObjectMapper.html#readValue (java.lang .String, java.lang.Class)) ... –

+0

Показать класс учеников. – jeremyjjbrown

+1

['ObjectMapper # readValue (String, Class)' существует.] (Http://fasterxml.github.io/jackson-databind/javadoc/2.3.0/com/fasterxml/jackson/databind/ObjectMapper.html#readValue% 28java.lang.String,% 20java.lang.Class% 29) Вы пропустили это? –

ответ

3

Попробуйте это,

Вы не можете создать новую строку, как ваши дела.

String string = "{\"id\":100,\"firstName\":\"Adam\"}"; 
    Student student = mapper.readValue(string, Student.class); 
+1

Построение ObjectMapper относительно дорого; Я не могу рекомендовать делать это каждый раз, когда вызывается метод. –

+0

Да, я получил удовольствие от этого, когда увидел, что причина, по которой он терпит неудачу, - это OP, а не его строка в « –

+1

Я полный идиот, и я смущен, когда задал этот вопрос. Спасибо вам за то, что помогли прояснить мою отсталость. – ViRALiC

0

И вместо обработки ошибок в каждом mapper.readValue(json,Class) вы можете написать вспомогательный класс, который имеет другой Generic метод.

и использовать

String jsonString = "{\"id\":100,\"firstName\":\"Adam\"}"; 
Student student = JSONUtils.convertToObject(jsonString,Student.class); 

Я возвращаюсь null и воображая печати след & проверки нулевой позже. Вы можете обрабатывать случаи ошибок по своему усмотрению.

public class JSONUtils { 
    public static String convertToJSON(Object object) 
    { 
     ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter(); 
     String json; 
     try { 
      json = ow.writeValueAsString(object); 
     } catch (JsonProcessingException e) { 
      e.printStackTrace(); 
      return convertToJSON(e); 
     } 
     return json; 
    } 


    public static <T> T convertToObject(Class<T> clazz,String jsonString) 
    { 
     try { 
     ObjectMapper mapper = new ObjectMapper(); 
     return (T)mapper.readValue(jsonString, clazz); 
     }catch(Exception e) 
     { 
      e.printStackTrace(); 
      return null; 
     } 
    } 
} 
Смежные вопросы