1

I am trying to extract json file data using python but running in some errors.

aircraft.json (json file):

{ "now" : 1609298440.3,
  "messages" : 31501,
  "aircraft" : [
    {"hex":"abadf9","alt_baro":37000,"alt_geom":36625,"gs":541.9,"track":73.3,"baro_rate":0,"version":0,"nac_p":7,"nac_v":1,"sil":2,"sil_type":"unknown","mlat":[],"tisb":[],"messages":13,"seen":6.6,"rssi":-25.3},
    {"hex":"acc02b","flight":"SWA312  ","alt_baro":37000,"alt_geom":36650,"gs":549.3,"track":62.2,"baro_rate":0,"category":"A3","nav_qnh":1013.6,"nav_altitude_mcp":36992,"nav_heading":56.2,"lat":42.171346,"lon":-93.298198,"nic":8,"rc":186,"seen_pos":66.3,"version":2,"nic_baro":1,"nac_p":8,"nac_v":1,"sil":3,"sil_type":"perhour","gva":1,"sda":2,"mlat":[],"tisb":[],"messages":1205,"seen":7.4,"rssi":-26.0},
    {"hex":"ac9e9a","category":"A4","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":746,"seen":119.1,"rssi":-26.6},
    {"hex":"a96577","flight":"DAL673  ","alt_baro":40025,"alt_geom":39625,"gs":371.4,"track":265.1,"baro_rate":0,"squawk":"2641","emergency":"none","category":"A4","nav_qnh":1013.6,"nav_altitude_mcp":40000,"nav_heading":258.8,"lat":42.057220,"lon":-94.098337,"nic":8,"rc":186,"seen_pos":0.9,"version":2,"nic_baro":1,"nac_p":9,"nac_v":1,"sil":3,"sil_type":"perhour","gva":2,"sda":2,"mlat":[],"tisb":[],"messages":3021,"seen":0.3,"rssi":-21.8},
    {"hex":"aa56db","category":"A3","version":2,"sil_type":"perhour","mlat":[],"tisb":[],"messages":1651,"seen":85.3,"rssi":-26.4}
  ]
}

My code:

import json

json_file = open('test.json')

aircraft_json = json.load(json_file)


for i in aircraft_json['aircraft']:
    print(i['hex'],i['flight'],i['alt_baro'],i['alt_geom'],i['gs'],i['gs'],i['track'],i['baro_rate'],i[
    'category'],i['nav_qnh'],i['nav_altitude_mcp'],i['lat'],i['lon'],i['nic'],i['rc'],i['seen_pos'],i['version'],i['nic_baro'],i['nac_p'],i['nac_v'],i['sil'],i['sil_type'],i['gva'],i['sda'],i['mlat'],i['tisb'],i['messages'],i['seen'],i['rssi'])
    
json_file.close()

Output:

Traceback (most recent call last):
  File "/home/pi/aircraft_json_to_csv.py", line 11, in <module>
    print(i['hex'],i['flight'],i['alt_baro'],i['alt_geom'],i['gs'],i['gs'],i['track'],i['baro_rate'],i[
KeyError: 'flight

The json file is updated every second and json file may miss key values like 'flight' or any random key values. My question is if that key is missing then how to replace those missing value with empty space without getting keyerror.

Thank you

1 Answer 1

2

My advice would be to give each field a suitable default value and store these fields in a dictionary.

Then, instead of assuming the field is present, check if the field exists. If it doesn't, then apply the default value.

Below is a simple example of this in action.

The defaults dict has been populated with a few possible defaults to get you started, to which you would add the rest of the fields as well.

I've adapted the loop to iterate through the keys of the dict (all the known fields so to speak), and add the default value for any missing field.

import json

with open('aircraft.json') as json_file:
    aircraft_json = json.load(json_file)

defaults = {
    'alt_baro': 0,
    'alt_geom': 0,
    'version': 0,
    'baro_rate': 0,
    'mlat': [],
    'tisb': []
    # similarly for the other fields
}

for dat in aircraft_json['aircraft']:
    for field in defaults.keys():
        if field not in dat:
            dat[field] = defaults[field]
        print(dat[field], end=' ')
    print('')
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you for the advice. I will definitely try that.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.