有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将jsonobject解析为两个不同的列表

我想在一个列表中解析纬度,在另一个列表中解析经度。 你知道如何在安卓中实现这一点吗。我正在谷歌地图上画一条路线,所以我需要lat和lng

{
      "userData": [
        {
          "Latitude": "28.597782",
          "Longitude": "77.298256",
          "IotName": "Bus7821",
          "createdAt": "2016-06-10T09:23:07.244Z",
          "updatedAt": "2016-06-10T09:23:07.244Z",
          "id": "575a86fbaf4d65a333c1a1b6"
        },
        {
          "Latitude": "28.598390",
          "Longitude": "77.297952",
          "IotName": "Bus7821",
          "createdAt": "2016-06-10T09:24:04.265Z",
          "updatedAt": "2016-06-10T09:24:04.265Z",
          "id": "575a8734af4d65a333c1a1b7"
        },
        {
          "Latitude": "28.598362",
          "Longitude": "77.297866",
          "IotName": "Bus7821",
          "createdAt": "2016-06-10T09:25:03.522Z",
          "updatedAt": "2016-06-10T09:25:03.522Z",
          "id": "575a876faf4d65a333c1a1b8"
        }
      ]
    }

我的代码片段

JSONObject parentObject = new JSONObject(buffer.toString());



                routeMap = parentObject.getJSONArray("userData");
                for (int i=0 ; i<routeMap.length();i++)
                {
                    JSONObject routes = routeMap.getJSONObject(i);
//                     routeLatitude = routes.get("Latitude");
                }

共 (3) 个答案

  1. # 1 楼答案

    Gson库是实现这一点的最佳方法。 根据json对象创建一个类

    class UserData {
        double Latitude
        double Longitude;
        String IotName;
        Date createdAt;
        Date updatedAt
        String id;
    }
    

    现在,一行Gson代码将完成您的所有工作

    UserData[] allRoutes = new Gson().fromJson(jsonString, UserData[].class);
    

    希望它能奏效。:)

  2. # 2 楼答案

    试试这个:

    try {
        List<String> lat = new ArrayList<>();
        List<String> lon = new ArrayList<>();
        JSONObject jsonObject = new JSONObject(yourJson);
        JSONArray jsonArray = jsonObject.getJSONArray("userData");
        for( int i=0;i<jsonArray.length();i++) {
            JSONObject jsonObject1 = jsonArray.getJSONObject(i);
            String latitude = jsonObject1.getString("Latitude");
            String longitude = jsonObject1.getString("Longitude");
            lat.add(latitude);
            lon.add(longitude);
        }  
        System.out.print(lat + "" + lon);
        } catch (Exception e) {
         e.printStackTrace();
        }
    

    更好的方法是创建如下POJO:

    public class MyLocation
    {
        private String id;
        private String updatedAt;
        private String createdAt;
        private String IotName;
        private String Latitude;
        private String Longitude;
    
        //other getters and setters here
    
        public String getLatitude ()
        {
            return Latitude;
        }
    
        public void setLatitude (String Latitude)
        {
            this.Latitude = Latitude;
        }
    
        public String getLongitude ()
        {
            return Longitude;
        }
    
        public void setLongitude (String Longitude)
        {
            this.Longitude = Longitude;
        }
    }
    

    现在你可以做:

    MyLocation ml = new MyLocation();
    ml.setLatitude(latitude);
    ml.setLongitude(longitude);
    

    在获得:

    ml.getLatitude();
    ml.getLongitude();
    
  3. # 3 楼答案

    试着这样做:

        routeMap = parentObject.getJSONArray("userData");
                            for (int i=0 ; i<routeMap.length();i++)
                            {
                                   JSONObject routes = routeMap.getJSONObject(i);
                                   routeLatitude = routes.getString("Latitude");
                                   routeLongitude = routes.getString("Longitude");
                                   listOne.add(routeLatitude);
                                   listTwo.add(routeLongitude);
                            }
    

    listOne和listTwo是你的两个ArrayList