JSON confusion
Terry Reedy
tjreedy at udel.edu
Wed Aug 17 16:59:50 EDT 2016
On 8/17/2016 12:35 PM, Steve Simmons wrote:
> I'm trying to write a small utility to find the closest railway station
> to a given (UK) postcode but the result is in JSON and I'm not familiar
> with it. I've got as far as extracting the JSON object and I can print
> the first level elements ("success" and "result") but I've totally
> confused myself about how to delve into the rest of the data structure.
> Can anyone point me to a 'how-to' for tackling a fairly complex SJON
> object or give me some pointers. ... or maybe point out if I'm taking an
> unnecessarily complex approach. Initially, I'm Looking to extract
> 'stationname', 'distance' and one or two of the coordinate pairs. To be
> honest, I'd rather have some hints rather than the whole solution
> otherwise I'll not learn anything :-) SteveS def main():
> import urllib
> import urllib.request
> import urllib.parse
> import urllib.response
> import json
add import pprint
> url
> ='https://data.gov.uk/data/api/service/transport/naptan_railway_stations/postcode?postcode=CT16+1ez&distance=2'
> req = urllib.request.urlopen(url)
>
> req_json = req.read()
> str_json = req_json.decode("utf-8")
>
> p_json = json.loads(str_json)
This result is nexted dicts and lists
> print(p_json)
> print ('======================================')
> print(repr(p_json))
> print('SUCCESS: ',repr(p_json['success']))
> print ('======================================')
> print('RESULT : ',repr(p_json['result']))
Replace prints above with
pprint.pprint(p_json)
and you will see the better formatted
{'result': [{'atcocode': '9100DOVERP',
'crscode': 'DVP',
'distance': 881.148432224,
'latlong': {'coordinates': [1.3052936134036113,
51.12569875059288],
'crs': {'properties': {'name': 'EPSG4326'},
'type': 'name'},
'type': 'Point'},
'ospoint': {'coordinates': [631380.0, 141464.0],
'crs': {'properties': {'name': 'EPSG27700'},
'type': 'name'},
'type': 'Point'},
'stationname': 'Dover Priory Rail Station',
'tiploccode': 'DOVERP'}],
'success': True}
Use this in combination with Jon Ribbens' answer.
--
Terry Jan Reedy
More information about the Python-list
mailing list