首页 > 解决方案 > 如何解析数组不是逗号分隔的 JSON 字符串?(Gson,Android 工作室)

问题描述

这是 JSON 格式(来自 API 的响应 - https://developer.ticketmaster.com/api-explorer/v2/)。如果我添加“_embedded”(具有场地列表)作为 Event Class 的属性不起作用。

如何从此 JSON 中获取位置?

{ "_embedded":{
      "events":[
         {
            "name":"Hamilton",
            "type":"event",
            "id":"Z7r9jZ1Ae0EP8",
            "test":false,
            "url":"http://www.ticketsnow.com/InventoryBrowse/TicketList.aspx?PID=2927950",
            "_embedded":{
               "venues":[
                  "0":                  {
                     "name":"Reynolds Hall",
                     "type":"venue",
                     "id":"Z7r9jZadyb",
                     "test":false,
                     "locale":"en-us",
                     "location":{
                        "longitude":"-115.162598",
                        "latitude":"36.182201"
                     }
                  }
               ]
            }
         }
      ]
   }
}

标签: javaandroidjson

解决方案


如果这是您的 JSON:

{
  "_embedded": {
    "events": [
      {
        "name": "Hamilton",
        "type": "event",
        "id": "Z7r9jZ1Ae0EP8",
        "test": false,
        "url": "http://www.ticketsnow.com/InventoryBrowse/TicketList.aspx?PID=2927950",
        "_embedded": {
          "venues": [
            {
              "name": "Reynolds Hall",
              "type": "venue",
              "id": "Z7r9jZadyb",
              "test": false,
              "locale": "en-us",
              "location": {
                "longitude": "-115.162598",
                "latitude": "36.182201"
              }
            }
          ]
        }
      }
    ]
  }
}

然后您可以像这样检索位置(假设您将其存储在 jString 变量中):

try {
    JSONObject jObj = new JSONObject(jString);
    String lat = jObj
            .getJSONObject("_embedded")
            .getJSONObject("events")
            .getJSONObject("_embedded")
            .getJSONArray("venues")
            .getJSONObject(0)
            .getJSONObject("location")
            .getString("latitude");
    String lng = jObj
            .getJSONObject("_embedded")
            .getJSONObject("events")
            .getJSONObject("_embedded")
            .getJSONArray("venues")
            .getJSONObject(0)
            .getJSONObject("location")
            .getString("longitude");
    LatLng location = new LatLng(Double.parseDouble(lat), Double.parseDouble(lng));
} catch (JSONException | NumberFormatException e) {
    e.printStackTrace();
}

推荐阅读