2014-08-28 3 views
2

Вот мой Json ответКак использовать Джексон ObjectMapper для разбора JSON ответа на Java объектов

"postedevent": [ 
    { 
     "status": "true", 
     "event_id": "800", 
     "num_of_image_event": "0", 
     "title": "Testy", 
     "photo": "http://54.200.110.49/checkplanner/img/upload/21310059819profile_image_1409303464798.png", 
     "event_date": "2014-08-29", 
     "fullDate": "Friday - August 29, 2014", 
     "event_from": "12:00AM", 
     "event_to": "12:15AM", 
     "city": "Ahm", 
     "state": "CA", 
     "member_id": "471", 
     "username": "Krishna Mohan", 
     "pencil": "yes", 
     "attend": "yes", 
     "company": "Development" 
    } 
] 

это класс Java, чтобы получить Java OBJS от ответа JSon

public class PostedEvent { 

String status; 
int event_id; 
int num_of_image_event; 
String title; 
String photo; 
String event_date; 
String fullDate; 
String event_from; 
String event_to; 
String city; 
String state; 
String member_id; 
String username; 
String pencil; 
String attend; 
String company; 


} 


public class PostedEvnetsList 
{ 
    ArrayList<PostedEvent> postedevent; 
} 

И я разбор в таким образом

InputStream is = WebResponse.getResponse(url); 
ObjectMapper mapper = new ObjectMapper(); 
PostedEvnetsList mList = null; 
mList = mapper.readValue(is,PostedEvnetsList.class); 
eventList = mList.postedevent; 

Я получаю следующее исключение синтаксического анализа

jackson.map.exc.UnrecognizedPropertyException: Непризнанное поле «Статус» (класс com.example.jsonproforexam.PostedEvent), не помеченные как игнорируемые

Я предрек то же поле, как и в ответ JSON, то почему я адресность это исключение Пожалуйста, помогите

+0

Вам необходимо внедрить геттеры и сеттеры – zozelfelfo

ответ

1

Вы можете использовать JsonProperty аннотацию, чтобы указать ключ JSON

Ex:

public class PostedEvent { 

    @JsonProperty("status") 
    String status; 

    @JsonProperty("event_id") 
    String eventId; 

.... 
.... 

Если вы пропустили некоторые поля из json в классе сущности, вы можете использовать аннотацию @JsonIgnoreProperties, чтобы игнорировать неизвестные поля.

@JsonIgnoreProperties(ignoreUnknown = true) 
public class PostedEvent { 

... 
+0

спасибо, что я следую вашему предложению и понял, что если мы сделаем непубличные поля невежественными, тогда Джексон сможет получить доступ к этим полям, взяв ссылку с json – HemangNirmal

4

Ваши поля PostedEvent и PostedEvent поле PostedEventsList не доступны.

Вы должны установить их как public (не рекомендуется) или предоставить публичные геттеры и сеттеры для них POJO-стиля.

Тогда Джексон сможет де-сериализовать и ошибка исчезнет.

+0

, благодаря чему вы решили мою ошибку и сэкономили мое время и усилия, и я хочу получить еще одну помощь. Не могли бы вы объяснить мне, почему Джексон не может получить доступ к полям, кроме публики, и что такое стратегия де-сериализации Джексона. – HemangNirmal

+1

@HemangNirmal. Джексон может получать доступ к непубличным полям, пока вы предоставляете общедоступные методы доступа (например, getters/seters), что является рекомендуемым способом (инкапсуляция дефисов в публичные поля). Вы можете найти дополнительную информацию и документацию на своей [домашней странице] (https://github.com/FasterXML/jackson). – Mena