2011-11-15 14 views
12

Mam modelu tak:Jackson Cofnięcie zmiennej jako ciąg JSON

private String message; 
private Integer errorCode;  
private String data; 

Otrzymuję JSON String z pilotem i wiadomości, zmienne ERRORCODE dostaje prawidłową wartość. Jednak nie chcę deserializować do mojej zmiennej danych. Chcę, żeby był ciągiem jsonowym:

{"cat": "1.2.3.4", "ner": "80", "name": "pinta" } 

po tym deserializuję go, aby się sprzeciwić. Jak mogę to zrobić?

PS: Aby wyjaśnić pytanie:

uzyskać ciąg Json tak:

{ "dane": { "kot": "1.2.3.4", "ner": „80 ”, "name": "Pinta"}, "message": "m", "errorCode": 12}

Po deserializacji moje zmienne powinny mieć, że wartości:

message => "m" 
errorCode => 12 
data => "{"cat": "1.2.3.4", "ner": "80", "name": "pinta" }" 
+0

Czy możesz uczynić to bardziej zrozumiałym? – MByD

+0

@MByD Kiedy debuguję zmienne po deserializacji, chcę zobaczyć, że moja zmienna danych ma tę wartość: '{" cat ":" 1.2.3.4 "," ner ":" 80 "," name ":" pinta "} 'ponieważ wysyłam go w ten sposób:' "dane": {"cat": "1.2.3.4", "ner": "80", "name": "pinta"} ' – kamaci

+0

@MByD Edytowałem moje pytanie. – kamaci

Odpowiedz

7

Jackson issue 596 było stworzony dla pożądanej funkcjonalności opisanej w pierwotnym pytaniu. Głosuj na nią, jeśli chcesz ją zaimplementować.

Obecne dostępne rozwiązanie to wdrożenie niestandardowego przetwarzania deserializacji.

Również wątek dotyczy tego tematu.

7

Proponuję raczej zezwolić, aby dane były powiązane z obiektem pośrednim; zazwyczaj jest to java.util.Map lub org.codehaus.jackson.JsonNode (Drzewo JSON). A potem możesz uzyskać dostęp do danych w dowolny sposób; w tym łatwej konwersji do POJO przy użyciu ObjectMapper.convertValue(inputPojo, outputType)).

+0

dziękuję za odpowiedź i głosowanie w górę. Po prostu chcę to wyjaśnić: używam 'myObject = mapper.readValue (data, clz); jaka jest różnica między' transferObject = mapper.convertValue (data, clz); '? – kamaci

+0

readValue() analizuje zawartość z danego źródła, podczas gdy convertValue() jest równoważne zapisywaniu wartości, odczytywanie jej z powrotem jako podanego typu - może przekonwertować wszystko, co może być serializowane jako JSON, na wszystko, co może być związane z JSON. – StaxMan

+0

+1 Najlepsza odpowiedź na ten problem. Zachowanie tego typu jako JsonNode umożliwia wywołanie metody toString() i uzyskanie wartości String json. Oczywiście najpierw pobiera deserialized, a następnie serializowane ponownie, co jest nieco marnotrawstwem, ale jak dotąd, jest to jedyny sposób, aby to zrobić ładnie i czysto – Rasive

Powiązane problemy