Несколько типов данных в JSON - PullRequest
0 голосов
/ 11 апреля 2020

Я получаю доступ к API, который имеет геометрические типы объектов в JSON объекте. У меня проблема в классе Kotlin модели (ниже), у меня не может быть двух типов объектов для узла, так как я получаю сообщение об ошибке

java.lang.IllegalStateException: Expected a double but was BEGIN_ARRAY at line 12 column 16 path $.features[0].geometry.geometries[0].coordinates[0];

, потому что для каждый внутренний узел координаты каждого объекта может возвращать:

List<Double> 
List<List<Double>>

API JSON

"geometries": [
      {
        "type": "Point",
        "coordinates": [153.0533903,-26.7735391]
      },
      {
        "type": "LineString",
        "coordinates": [
          [153.0258962, -27.3399828],
          [153.02596, -27.34007],
          [153.02602, -27.34015],
          [153.026028, -27.3401745]
        ]
      }
 ]
 ...
 ...
 ...

Ответ внешнего API передается через модели Retrofit, однако в моем классе моделей как обеспечивается обработка List<Double> & List<List<Double>>

public class EventsGeometriesAPINodeModel {

   @SerializedName("type")
   @Expose
   internal var type: String? = null

   //how do provide both List<Double> List<List<Double>> processing
   //API retruns either:
   //List<Double> 
   //List<List<Double>>

   @SerializedName("coordinates")
   @Expose
   internal var coordinates: List<Double>? = null

}

1 Ответ

0 голосов
/ 11 апреля 2020

Вы должны сделать координаты переменной динамическими c, как JsonArray, и всякий раз, когда вы получаете данные, вы должны проверять тип этой переменной.

val listCoordinates = jsonObject.coordinates
if(listCoordinates is List<Double>){

} else if(listCoordinates is List<List<Double>>){

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...