【问题标题】:Parsing complex json android using GSON使用 GSON 解析复杂的 json android
【发布时间】:2020-10-08 02:48:45
【问题描述】:

我有类似的 json 文件

    {
        "type": "Feature",
        "properties": {
          "centlat": -20.63101971,
          "ICAOCODE": "FMMM",
          "REGION": "AFI",
          "FIRname": "FIR ANTANANARIVO",
          "centlong": 48.56534436,
          "StateCode": "MDG",
          "StateName": "Madagascar"
        },
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                57.00000190700007,
                -29.999999999999943
              ],
              [
                57.00000190700007,
                -22.333332061999954
              ],
              [
                55.50000190700007,
                -18.999999999999943
              ],
              [
                55.50000190700007,
                -9.999999999999943
              ],
              [
                45.00000190800006,
                -9.999999999999943
              ],
              [
                44.00000190800006,
                -10.333332060999965
              ],
              [
                41.50000190700007,
                -10.999999999999943
              ],
              [
                43.00000190700007,
                -14.999999999999943
              ],
              [
                40.00000190800006,
                -19.999999999999943
              ],
              [
                40.00000190800006,
                -29.999999999999943
              ],
              [
                57.00000190700007,
                -29.999999999999943
              ]
            ]
          ]
        }
      }

I have installed the plugin robo pogo generator which gave me this output

package com.example.airlineapp.model

import com.google.gson.annotations.SerializedName

data class GeographicalData(

    @field:SerializedName("geometry")
    val geometry: Geometry? = null,

    @field:SerializedName("type")
    val type: String? = null,

    @field:SerializedName("properties")
    val properties: Properties? = null
)

data class Geometry(

    @field:SerializedName("coordinates")
    val coordinates: ArrayList<Double?>? = null,

    @field:SerializedName("type")
    val type: String? = null
)

data class Properties(

    @field:SerializedName("centlong")
    val centlong: Double? = null,

    @field:SerializedName("centlat")
    val centlat: Double? = null,

    @field:SerializedName("FIRname")
    val fIRname: String? = null,

    @field:SerializedName("StateName")
    val stateName: String? = null,

    @field:SerializedName("StateCode")
    val stateCode: String? = null,

    @field:SerializedName("ICAOCODE")
    val iCAOCODE: String? = null,

    @field:SerializedName("REGION")
    val rEGION: String? = null
)

我尝试解析代码,但它总是显示Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 16 column 10 path $[0].geometry.coordinates[0]

我纠正了这个问题,但问题是我现在如何用复杂的数组结构解析这个 json,有什么建议吗?

我也尝试在我的 POJO 类中添加数组数组,类似于 json 文件的结构,但没有奏效。

坐标数组基本上是数组数组的数组,一个三级数组

【问题讨论】:

  • 尝试使用 List>> 坐标

标签: android api gson retrofit rx-java


【解决方案1】:

你的 JSON 结构是错误的,而不是这个

...
 "coordinates": [
            [
              [
                57.00000190700007,
                -29.999999999999943
              ],
...

你应该有这个

...
 "coordinates": [
              {
                57.00000190700007,
                -29.999999999999943
              },
...

【讨论】:

  • 很抱歉,您的代码对他来说会更复杂。您将坐标转换为JSONObject,这将使所有纬度为KEY,经度为VALUES。我猜想遍历它们并获取这两个数据将很困难。相反,您可以使用“坐标”创建 JSON:[ {“纬度”:“57.00000190700007”,“经度”:“-29.999999999999943”}]
  • 嗨,谢谢大家的回复,我设法将父数组作为 Json 元素,而不是将其作为 JSON 数组。
猜你喜欢
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多