0

I'm trying to deserialize a GeoJson FeatureCollection contained in a file (.json extension), with contents:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [
          102.0,
          0.5
        ]
      }
    },
    {
      "type": "Feature",
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [
            102.0,
            0.0
          ],
          [
            103.0,
            1.0
          ],
          [
            104.0,
            0.0
          ],
          [
            105.0,
            1.0
          ]
        ]
      }
    },
    {
      "type": "Feature",
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              100.0,
              0.0
            ],
            [
              101.0,
              0.0
            ],
            [
              101.0,
              1.0
            ],
            [
              100.0,
              1.0
            ],
            [
              100.0,
              0.0
            ]
          ]
        ]
      }
    }
  ]
}

The code I have for this task is this:

    fun deserializeGeoJsonFromFile(filePath: String): FeatureCollection? {
        val gson = Gson()
        val typeToken = object : TypeToken<FeatureCollection>() {}.type

        return try {
            val fileContent = File(filePath).readText()
            gson.fromJson(fileContent, typeToken)
        } catch (e: Exception) {
            println("Error deserializing GeoJSON from file: ${e.message}")
            null
        }
    }

I'm using the FeatureCollection from io.github.dellisd.spatialk.geojson.

I get an error:

Error deserializing GeoJSON from file: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

To me, seems that the parser was expecting an array somewhere, but got something else instead. However, I checked the JSON and it's not malformed. Any ideas about what's happening?

1 Answer 1

0

I found the problem: in a nutshell, I was using Gson (which is built in context of general JSON) to deserialize SpatialK-specific types; I guess the error makes sense, as Gson has no obligation to understand domain specific objects.

I solved by replacing:

gson.fromJson(fileContent, typeToken)

with (note that it's SpatialK + kotlinx.serialization now):

Json.decodeFromString(FeatureCollection.serializer(), fileContent)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.