2015-10-27 3 views
0

Обычно я делать хорошо с объектом внутри массива сДжексон синтаксического анализа массива внутри массива

models = mapper.readValue(jSONstream, mapper.getTypeFactory() 
      .constructCollectionType(List.class, Model.class)); 

Но этот запрос HTTP отправить обратно на меня что-то вроде этого.

Route.JSON

[ 
    [ 
     { 
     "length":1278.455, 
     "duration":660, 
     "legs":[ 
      { 
       "length":342, 
       "duration":286.92, 
       "type":"walk", 
       "locs":[ 
        { 
        "coord":{ 
         "x":2548196, 
         "y":6678528 
        }, 
        "arrTime":"201510271103", 
        "depTime":"201510271103", 
        "name":null 
        }, 
        { 
        "coord":{ 
         "x":2548221.7, 
         "y":6678553.5 
        }, 
        "arrTime":"201510271103", 
        "depTime":"201510271103", 
        "name":"Purotie" 
        }, 
        { 
        "coord":{ 
         "x":2548380.4, 
         "y":6678731.4 
        }, 
        "arrTime":"201510271107", 
        "depTime":"201510271107", 
        "name":null 
        }, 
        { 
        "coord":{ 
         "x":2548393.8, 
         "y":6678721.2 
        }, 
        "arrTime":"201510271107", 
        "depTime":"201510271107", 
        "name":"Pit\u00e4j\u00e4nm\u00e4entie" 
        }, 
        { 
        "coord":{ 
         "x":2548426, 
         "y":6678692 
        }, 
        "arrTime":"201510271108", 
        "depTime":"201510271108", 
        "name":"Takomotie", 
        "code":"1465104", 
        "shortCode":"1518", 
        "stopAddress":"Pit\u00e4j\u00e4nm\u00e4entie" 
        } 
       ] 
      }, 
      { 
       "length":456, 
       "duration":60, 
       "type":"5", 
       "code":"2550 2", 
       "locs":[ 
        { 
        "coord":{ 
         "x":2548426, 
         "y":6678692 
        }, 
        "arrTime":"201510271108", 
        "depTime":"201510271108", 
        "name":"Takomotie", 
        "code":"1465104", 
        "shortCode":"1518", 
        "stopAddress":"Pit\u00e4j\u00e4nm\u00e4entie" 
        }, 
        { 
        "coord":{ 
         "x":2548768, 
         "y":6678460 
        }, 
        "arrTime":"201510271109", 
        "depTime":"201510271109", 
        "name":"Valimotie", 
        "code":"1465102", 
        "shortCode":"1516", 
        "stopAddress":"Pit\u00e4j\u00e4nm\u00e4entie" 
        } 
       ] 
      }, 
      { 
       "length":479, 
       "duration":366.36, 
       "type":"walk", 
       "locs":[ 
        { 
        "coord":{ 
         "x":2548768, 
         "y":6678460 
        }, 
        "arrTime":"201510271109", 
        "depTime":"201510271109", 
        "name":"Valimotie", 
        "code":"1465102", 
        "shortCode":"1516", 
        "stopAddress":"Pit\u00e4j\u00e4nm\u00e4entie" 
        }, 
        { 
        "coord":{ 
         "x":2548818.8, 
         "y":6678448 
        }, 
        "arrTime":"201510271109", 
        "depTime":"201510271109", 
        "name":null 
        }, 
        { 
        "coord":{ 
         "x":2548822.7, 
         "y":6678455.2 
        }, 
        "arrTime":"201510271110", 
        "depTime":"201510271110", 
        "name":"Pit\u00e4j\u00e4nm\u00e4entie" 
        }, 
        { 
        "coord":{ 
         "x":2548838.4, 
         "y":6678446.2 
        }, 
        "arrTime":"201510271110", 
        "depTime":"201510271110", 
        "name":"H\u00f6yl\u00e4\u00e4m\u00f6tie" 
        }, 
        { 
        "coord":{ 
         "x":2548945.8, 
         "y":6678631.6 
        }, 
        "arrTime":"201510271113", 
        "depTime":"201510271113", 
        "name":"Karvaamokuja" 
        }, 
        { 
        "coord":{ 
         "x":2549062, 
         "y":6678638 
        }, 
        "arrTime":"201510271115", 
        "depTime":"201510271115", 
        "name":null 
        } 
       ] 
      } 
     ] 
     } 
    ], 
    [ 
     { 
     "length":1278.455, 
     "duration":660, 
     "legs":[ 
      { 
       "length":342, 
       "duration":286.92, 
       "type":"walk", 
       "locs":[ 
        { 
        "coord":{ 
         "x":2548196, 
         "y":6678528 
        }, 
        "arrTime":"201510271104", 
        "depTime":"201510271104", 
        "name":null 
        }, 
        { 
        "coord":{ 
         "x":2548221.7, 
         "y":6678553.5 
        }, 
        "arrTime":"201510271104", 
        "depTime":"201510271104", 
        "name":"Purotie" 
        }, 
        { 
        "coord":{ 
         "x":2548380.4, 
         "y":6678731.4 
        }, 
        "arrTime":"201510271108", 
        "depTime":"201510271108", 
        "name":null 
        }, 
        { 
        "coord":{ 
         "x":2548393.8, 
         "y":6678721.2 
        }, 
        "arrTime":"201510271108", 
        "depTime":"201510271108", 
        "name":"Pit\u00e4j\u00e4nm\u00e4entie" 
        }, 
        { 
        "coord":{ 
         "x":2548426, 
         "y":6678692 
        }, 
        "arrTime":"201510271109", 
        "depTime":"201510271109", 
        "name":"Takomotie", 
        "code":"1465104", 
        "shortCode":"1518", 
        "stopAddress":"Pit\u00e4j\u00e4nm\u00e4entie" 
        } 
       ] 
      }, 
      { 
       "length":456, 
       "duration":60, 
       "type":"5", 
       "code":"2270 2", 
       "locs":[ 
        { 
        "coord":{ 
         "x":2548426, 
         "y":6678692 
        }, 
        "arrTime":"201510271109", 
        "depTime":"201510271109", 
        "name":"Takomotie", 
        "code":"1465104", 
        "shortCode":"1518", 
        "stopAddress":"Pit\u00e4j\u00e4nm\u00e4entie" 
        }, 
        { 
        "coord":{ 
         "x":2548768, 
         "y":6678460 
        }, 
        "arrTime":"201510271110", 
        "depTime":"201510271110", 
        "name":"Valimotie", 
        "code":"1465102", 
        "shortCode":"1516", 
        "stopAddress":"Pit\u00e4j\u00e4nm\u00e4entie" 
        } 
       ] 
      }, 
      { 
       "length":479, 
       "duration":366.36, 
       "type":"walk", 
       "locs":[ 
        { 
        "coord":{ 
         "x":2548768, 
         "y":6678460 
        }, 
        "arrTime":"201510271110", 
        "depTime":"201510271110", 
        "name":"Valimotie", 
        "code":"1465102", 
        "shortCode":"1516", 
        "stopAddress":"Pit\u00e4j\u00e4nm\u00e4entie" 
        }, 
        { 
        "coord":{ 
         "x":2548818.8, 
         "y":6678448 
        }, 
        "arrTime":"201510271110", 
        "depTime":"201510271110", 
        "name":null 
        }, 
        { 
        "coord":{ 
         "x":2548822.7, 
         "y":6678455.2 
        }, 
        "arrTime":"201510271111", 
        "depTime":"201510271111", 
        "name":"Pit\u00e4j\u00e4nm\u00e4entie" 
        }, 
        { 
        "coord":{ 
         "x":2548838.4, 
         "y":6678446.2 
        }, 
        "arrTime":"201510271111", 
        "depTime":"201510271111", 
        "name":"H\u00f6yl\u00e4\u00e4m\u00f6tie" 
        }, 
        { 
        "coord":{ 
         "x":2548945.8, 
         "y":6678631.6 
        }, 
        "arrTime":"201510271114", 
        "depTime":"201510271114", 
        "name":"Karvaamokuja" 
        }, 
        { 
        "coord":{ 
         "x":2549062, 
         "y":6678638 
        }, 
        "arrTime":"201510271116", 
        "depTime":"201510271116", 
        "name":null 
        } 
       ] 
      } 
     ] 
     } 
    ], 
    [ 
     { 
     "length":1198.389, 
     "duration":960, 
     "legs":[ 
      { 
       "length":1198, 
       "duration":998.34, 
       "type":"walk", 
       "locs":[ 
        { 
        "coord":{ 
         "x":2548196, 
         "y":6678528 
        }, 
        "arrTime":"201510271105", 
        "depTime":"201510271105", 
        "name":null 
        }, 
        { 
        "coord":{ 
         "x":2548221.7, 
         "y":6678553.5 
        }, 
        "arrTime":"201510271105", 
        "depTime":"201510271105", 
        "name":"Purotie - Takomotie" 
        }, 
        { 
        "coord":{ 
         "x":2548426, 
         "y":6678797.7 
        }, 
        "arrTime":"201510271110", 
        "depTime":"201510271110", 
        "name":"Takomotie" 
        }, 
        { 
        "coord":{ 
         "x":2548455.9, 
         "y":6678803.9 
        }, 
        "arrTime":"201510271110", 
        "depTime":"201510271110", 
        "name":"Kornetintie" 
        }, 
        { 
        "coord":{ 
         "x":2548760.5, 
         "y":6678595 
        }, 
        "arrTime":"201510271116", 
        "depTime":"201510271116", 
        "name":"Valimotie" 
        }, 
        { 
        "coord":{ 
         "x":2548824.5, 
         "y":6678701.7 
        }, 
        "arrTime":"201510271117", 
        "depTime":"201510271117", 
        "name":"Karvaamokuja" 
        }, 
        { 
        "coord":{ 
         "x":2549062, 
         "y":6678638 
        }, 
        "arrTime":"201510271121", 
        "depTime":"201510271121", 
        "name":null 
        } 
       ] 
      } 
     ] 
     } 
    ] 
] 

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

P/S: Здесь представлена ​​модель со всеми геттерами и сеттерами.

Model.class

public class ModelRoutes { 

    List<ModelRoute> modelRoutes; 

    public class ModelRoute { 
     long lenght; 
     long duration; 
     List<Leg> legs; 

     public class Leg { 
      long lenght; 
      long duration; 
      String type; 
      String code; 
      List<Locs> locs; 
      List<Shape> shapes; 

      public class Locs { 
       Coord coord; 
       long arrTime; 
       long depTime; 
       String name; 
       long code; 
       String shortCode; 
       String stopAddress; 

       public class Coord { 
        double x; 
        double y; 
       } 
      } 

      public class Shape{ 
       double x; 
       double y; 
      } 

     } 
    } 



} 

Кроме того, работает модульное тестирование на это дает мне ошибку com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of com.avior.aviorandroid.Models.ModelRoutes out of START_ARRAY token at line: 1, column: 2

ответ

0

DeanK

Я бы определил мои классы модели, как показано ниже, и использовать состав для построения внешнего элемента.

public class OuterMostClass { 
    private double length; 
    private int duration, 
    private InnerElement[] innerElements; 
} 


public class InnerElement { 
    private double length; 
    private double duration; 
    private String type; 
    private Location[] locs;  
} 

public class Location { 
    private Coordinates coords; 
    private Date arrTime; 
    private Date depTime; 
    private String name; 
} 

public class Coordinates { 
    private int x; 
    private int y; 
} 

Пожалуйста, добавьте необходимые методы получения и установки (с помощью любой функции IDE), а также исправить некоторые из имен, Результат запроса Http является массив OuterMostClass. Таким образом, вы получите массив OuterMostClass [].

1

Вам нужно еще один клан, чтобы нанести на карту объект между ModelRoute и Leg. Посмотрите на эту картину вашего JSON:

enter image description here

enter image description here JSON -> Список < < ModelRoute NEW_Object < Leg ...

+0

Спасибо за ваш ответ. Я думаю, что у меня уже есть этот объект. Это называется ModelRoute, внутри основного класса ModelRoutes. – DeanK

+0

@DeanK Существует объект json между массивом и полями 'length',' duration' и 'legs', которые, я думаю, вы не отображали. –