Home > Blockchain >  How to access repeated elements in json object java?
How to access repeated elements in json object java?

Time:10-27

At first: I know, there are many questions like this but the answers dont help. And I am new to JSON and appreciate every answer.

I have a json object like this:

{
  "version": 0.6,
  "generator": "Overpass API 0.7.57 93a4d346",
  "osm3s": {
    "timestamp_osm_base": "2021-10-26T12:48:42Z",
    "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL."
  },
  "elements": [

{
  "type": "node",
  "id": 58489979,
  "lat": 52.5098189,
  "lon": 13.4073729,
  "tags": {
    "addr:city": "Berlin",
    "addr:country": "DE",
    "addr:housenumber": "83",
    "addr:postcode": "10179",
    "addr:street": "Alte Jakobstraße",
    "addr:suburb": "Mitte",
    "brand": "Netto Marken-Discount",
    "brand:wikidata": "Q879858",
    "brand:wikipedia": "de:Netto Marken-Discount",
    "name": "Netto Marken-Discount",
    "shop": "supermarket",
    "website": "http://netto-online.de/",
    "wheelchair": "no"
  }
},
{
  "type": "node",
  "id": 269479009,
  "lat": 52.5136840,
  "lon": 13.4060088,
  "tags": {
    "addr:city": "Berlin",
    "addr:country": "DE",
    "addr:housenumber": "12",
    "addr:postcode": "10179",
    "addr:street": "Fischerinsel",
    "addr:suburb": "Mitte",
    "contact:website": "http://www.edeka.de",
    "name": "Edeka Ungefroren",
    "opening_hours": "Mo-Sa 07:00-21:00",
    "shop": "supermarket",
    "toilets:wheelchair": "yes",
    "wheelchair": "yes"
  }
}, ...

the json object can have hundreds of these elements which begin with "type" : "node" . Now I want to access all lat, lon and names. There are many examples how to access the elements, I know but they dont work, for example this doesnt work:

JSONObject jsonObj = new JSONObject(string);
jsonObj.getString("lat");

Furthermore I have hundreds of the elements and I want to access all lats, all lons, and all names. How do I do that? Most of the examples I saw, are for simple json objects or did I just understood them wrong?

CodePudding user response:

You need first to get the "elements" property as a JSONArray. Then you can retrieve the JSONObject holding lat as follow:

JSONObject jsonObj = new JSONObject(string);
JSONArray resultArray = jsonObj.getJSONArray("elements");
for (int i = 0; i < resultArray.length(); i  ) {
    JSONObject item = resultArray.getJSONObject(i);
     
    // Now you can retrieve the lat
    double lat = item.getDouble("lat");  // Not getString("lat") because lat is a number, not a string
    ...
}
  • Related