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
...
}