使用 Google map api 在 android Studio 中解析 Json

Posted

技术标签:

【中文标题】使用 Google map api 在 android Studio 中解析 Json【英文标题】:Parsing Json in android Studio with Google map api 【发布时间】:2020-10-07 08:18:44 【问题描述】:

我对 android 开发非常陌生。我正在尝试将“坐标”解析为标记,将“名称线”解析为来自以下 JSON sn-p 的相应坐标的标题:

[
    "osm_id": "45737878",
    "jsongeoms": [
        "longitude": 4.379361,
        "latitude": 45.4325822004212
    , 
        "longitude": 4.3798922,
        "latitude": 45.43297760042115
    , 
        "longitude": 4.3799371,
        "latitude": 45.43302460042115
    , 
        "longitude": 4.3800508,
        "latitude": 45.433070900421136
    ],
    "way": "0102000020E610000004000000ED82C1357784114005D281DA5EB746409F05FC7502851140CDDA5CCF6BB74640F9252C3B0E8511400E96A0596DB74640494673092C8511403B1405DE6EB74640",
    "highway": "residential",
    **"nameline"**: "Rue Vaucanson",
    "maxspeed": null
, 
    "osm_id": "272992421",
    "jsongeoms": [
        "longitude": 4.3803678,
        "latitude": 45.432611700421205
    , 
        "longitude": 4.380298399999999,
        "latitude": 45.43271530042118
    , 
        "longitude": 4.3800861,
        "latitude": 45.43302760042115
    , 
        "longitude": 4.3800508,
        "latitude": 45.433070900421136
    , 
        "longitude": 4.3799992,
        "latitude": 45.43315010042112
    , 
        "longitude": 4.3796751,
        "latitude": 45.433588600421075
    , 
        "longitude": 4.3796212,
        "latitude": 45.43364890042106
    ], "way": "0102000020E6100000070000004ECEF5227F8511408896F8D15FB746406EE29AF16C851140D6E4073763B7464020A8644A358511407F09CB726DB74640494673092C8511403B1405DE6EB746405006A2821E851140AFC8657671B74640106CA68CC98411400C5DCDD47FB746401D797B6BBB8411409EA0A2CE81B74640",
    "highway": "secondary",
    **"nameline"**: "Boulevard Martin Bernard",
    "maxspeed": null
,
...
]

但我的输出并不令人满意。

请在下面查看我的代码并告诉我哪里出错了:

JsonArrayRequest request= new JsonArrayRequest(Request.Method.GET,url,null, new Response.Listener<JSONArray>() 
  @Override
  public void onResponse(JSONArray response) 
    for (int i = 0; i < response.length(); i++) 
      try 
        JSONObject jsonObject = response.getJSONObject(i);
        JSONArray jsonArray = jsonObject.getJSONArray("jsongeoms");
        for (int j = 0; j < jsonArray.length(); j++) 
          JSONObject jsongeoms = jsonArray.getJSONObject(i);
          double longitude = jsongeoms.getDouble("longitude");
          double latitude = jsongeoms.getDouble("latitude");
          LatLng sainte = new LatLng(latitude, longitude);
          mMap.addMarker(new MarkerOptions().position(sainte).title("Service Result"));
          mMap.moveCamera(CameraUpdateFactory.newLatLng(sainte));
          mMap.getMaxZoomLevel();
        

        /* Enter code here */
      
    
  

【问题讨论】:

您在此处粘贴的不是有效的 json。 “我的输出不令人满意”是什么意思?您希望获得什么数据以及目前获得什么数据? 它只是因为 ArrayIndexOutOfBound 而崩溃吗?请记住,.length() 会告诉您数组中有多少项,但在 java 中,第一个元素从位置 0 开始计数,您希望循环直到: i 应用程序没有崩溃。我没有得到所有的坐标。从“jsongeoms”的第一个数组中,我需要所有坐标,但我只得到 1 个坐标。 【参考方案1】:
JsonArrayRequest request= new JsonArrayRequest(Request.Method.GET,url,null,
            new Response.Listener<JSONArray>()
                @Override
                public void onResponse(JSONArray response) 
                for (int i= 0;i< response.length();i++) 
                    try 
                        JSONObject jsonObject = response.getJSONObject(i);
                        String naming= jsonObject.getString("nameline");
                        String highway= jsonObject.getString("highway");
                        String speed = jsonObject.getString("maxspeed");
                        String way = jsonObject.getString("way");
                        JSONArray jsonArray = jsonObject.getJSONArray("jsongeoms");
                        for (int j = 0; j < jsonArray.length(); j++) 
                            JSONObject jsongeoms = jsonArray.getJSONObject(j);
                            double longitude = jsongeoms.getDouble("longitude");
                            double latitude = jsongeoms.getDouble("latitude");
                            LatLng sainte = new LatLng(latitude,longitude);
                            mMap.addMarker(new MarkerOptions().position(sainte).title(naming)
                                    .snippet(highway.concat(speed).concat(way))
                                    .icon(bitmapDescriptorFromVector(getApplicationContext(),R.drawable.ic_play_arrow_black_24dp)));
                            mMap.moveCamera(CameraUpdateFactory.newLatLng(sainte));
                            mMap.getMaxZoomLevel();


                        
                     catch (JSONException e) 
                        e.printStackTrace();
                    
                
            
            ,

【讨论】:

以上是关于使用 Google map api 在 android Studio 中解析 Json的主要内容,如果未能解决你的问题,请参考以下文章

在 maps.google.com 上的缩放比在 Google Maps API v3 上更流畅

请教GOOGLE MAP API国内能访问的地址

使用 Google Maps API 手动调整路线

在 Jest 测试之前无法加载 Google Maps API

如何使用 JavaScript 在 Google Maps API 中仅获取一个标记

如何在 android 上使用 google map api 获取 google 驾驶指令?