2014-10-22 3 views
0

Привет, ребята У меня проблема на Java. Проблема заключается в разборе JSON с Джексоном, как мне было поручено. Мой JSON хорошо разбирается, это не проблема. Проблема заключается в том, что у меня есть несколько элементов JSON в одном JSON. Я разобран это так:Java ClassCastException при получении JSON-анализируемого java-объекта

ObjectMapper objectMapper = new ObjectMapper(); 

try { 
    List<Unit> unitList = objectMapper.readValue(json,List.class); 

    System.out.println("UnitSize " + String.valueOf(unitList.size())); 
    System.out.println(unitList.get(0).getUnitEmail()); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

и в UnitSize он скажет мне, что у меня есть ровно 5 объектов типа блока, который в порядке, но когда я хочу, чтобы получить что-то из списка он говорит меня это:

Exception in thread "main" java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.reddatura.API.HTTPRequest$Unit 

Я искал его, но ничего значимого. Что должно быть проблемой

EDIT:

вот мой класс фрагмент кода:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class Unit 
{ 

    @JsonProperty("unitid") 
    int unitId; 

    @JsonProperty("unitname") 
    String unitName; 

    @JsonProperty("unitlogo") 
    String unitLogo; 

    @JsonProperty("unitaddress") 
    String unitAddr; 
    //other fields, getters setters 
    @JsonCreator 
    public Unit() 
    { 

    } 
} 

Я хочу, чтобы разобрать в этой модели

+0

Вам может понадобиться предоставить еще один код. Где именно вы кастинг? – bmartins

+0

Вы не можете отнести блок в список. Вам придется перебирать список и получать объекты по одному –

+2

Ваш список содержит LinkedHashMap, а не Unit – ToYonos

ответ

1

Я думаю, что вы не кастинг правильно ваше значение JSon:

Использование jackson вы можете сделать следующее:

List<Unit> myUnits = objectMapper.readValue(json, objectMapper.getTypeFactory(). 
      constructCollectionType(List.class, Unit.class)); 

Надеется, что это помогает :)

+0

Я не хочу звучать грубо, но это не работает. Дает мне ошибку: непризнанное поле «unitid» (класс com.reddatura.API.HTTPRequest), не отмеченное как невежественное, когда я хочу его разобрать следующим образом:/ – Citrus

+0

напечатайте свой json (или, по крайней мере, часть его), и посмотрите, json поступает правильно – zozelfelfo

+0

Я уже печатаю свой JSON, и он действительно (прошел через валидатор) – Citrus

0

сделать что-то вроде этого:

JSONObject jObject = new JSONObject(jsonString); 
      JSONArray jsonArray = jObject.getJSONArray("posts"); 
      for (int i = 0; i < jsonArray.length(); i++) { 
        int a = jsonArray.getJSONObject(i).getInt("a"), 
        String s = jsonArray.getJSONObject(i).getString("b")); 
      } 

jsonString переменной строки и должен быть JSon синтаксис

1

попробовать этот

ObjectMapper objectMapper = new ObjectMapper(); 

     try { 
      Unit[] unit = objectMapper.readValue(jsonString, Unit[].class); 
      Log.i("TEST", String.valueOf(unit.length)+" ******* "+unit[1].getUnitEmail()+" ******* "+unit[1].getUnitName()); 

      // or 
      List<Unit> unit1 = objectMapper.readValue(jsonString, new TypeReference<List<Unit>>() { }); 
      Log.i("TEST_1", String.valueOf(unit1.size())+" ****11111*** "+unit1.get(1).getUnitEmail()+" **1111111**** "+unit1.get(1).getUnitName()); 

     } catch (IOException e) { 
      e.printStackTrace(); 
    } 
Смежные вопросы