2016-07-06 5 views
1

Я получаю от API длинной JSON, например .:Gson пользовательских десериализации, но только одно поле

{ 
    "field1": "val1", 
    "field2": "val2", 
    ... 
    "SOME_FIELD": " ABC ", 
    ... 
    "fieldx": "valx" 
} 

Я хотел бы десериализации его с Gson. Все работает отлично, но поле "SOME_FIELD" значение всегда с раздражающими пространствами. Я хотел бы обрезать() это значение поля (API не может быть изменен). Я знаю, что могу использовать JsonDeserializer, но потом мне нужно вручную прочитать все поля. Возможно ли отредактировать только одно интересное поле при десериализации, но использовать автоматическую десериализацию для остальной части?

+1

[Этот вопрос] (http://stackoverflow.com/questions/23660334/is-possible-to-use-setters-when-gson-deserializes-a-json) может помочь вам .. Другим вариантом было бы использовать getter всякий раз, когда вы извлекаете значение из объекта. – BadCash

+0

@vikrantkashyap ваша ссылка действительно помогла, спасибо – user3626048

ответ

0

Здесь я пишу Демо-класс для преобразования JSON в класс, игнорируя некоторые неиспользуемые свойства, встроенные в JSON.

Здесь я использовал ObjectMapper Класс для десериализации JSONObject как Object.

//configuration to enables us to ignore non-used Unknow Properties. 
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 

Test Class (код для преобразования JSON в классе Object).

import com.fasterxml.jackson.core.JsonParseException; 
import com.fasterxml.jackson.core.JsonProcessingException; 
import com.fasterxml.jackson.databind.DeserializationFeature; 
import com.fasterxml.jackson.databind.JsonMappingException; 
import com.fasterxml.jackson.databind.ObjectMapper; 

public class Test { 

    /** 
    * @param args 
    * @throws IOException 
    * @throws JsonProcessingException 
    * @throws JsonMappingException 
    * @throws JsonParseException 
    */ 
    public static void main(String[] args) throws JsonParseException, JsonMappingException, JsonProcessingException, IOException { 
     Test o = new Test(); 
     o.GetJsonAsObject(o.putJson()); 

    } 

//function to generate a json for demo Program. 
    private String putJson() throws JsonProcessingException{ 
     HashMap<String, String> v_Obj = new HashMap<>(); 
     v_Obj.put("field1", "Vikrant"); 
     v_Obj.put("field2", "Kashyap"); 
     return new ObjectMapper().writeValueAsString(v_Obj); // change the HashMap as JSONString 
    } 

    //function to Convert a json Object in Class Object for demo Program. 
    private void GetJsonAsObject(String value) throws JsonParseException, JsonMappingException, IOException{ 
     ObjectMapper mapper = new ObjectMapper(); 
     mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
     Test1 obj = mapper.readValue(value, Test1.class); 
     System.out.println(obj); 
    } 

} 

Test1.java (Conversion POJO класса)

class Test1{ 

    private String field1; 

    public String getField1() { 
     return field1; 
    } 

public void setField1(String field1) { 
    this.field1 = field1; 
} 
public String toString(){ 
    return this.field1.toString(); 
} 

}

Читать Комментарий Правильно .. надеюсь, что вы получили эту концепцию.

Благодаря

+0

спасибо за сообщение, но я использую Gson и меняю его на Jackson, потребуется слишком много времени (весь проект довольно большой, а gson используется во многих местах). – user3626048

+0

попробуйте эту ссылку >> http://www.baeldung.com/gson-deserialization-guide –

Смежные вопросы