Home > OS >  Better way to remap elements in each json object in json array
Better way to remap elements in each json object in json array

Time:10-22

I have a json array that looks like this:

{'1': {'ID': '1', ' ': 'Aaron K###', 'Distributor': 'National Energy', 'State': 'BC', 'Brand': 'Trane', 'Cell': '778-###-####', 'email address': '', 'Notes': '', '': ''}, '2': {'ID': '2', ' ': 'Martin', 'Distributor': 'Pierce Phelps', 'State': 'PA', 'Brand': 'Bryant/Carrier', 'Cell': '267-###-####', 'email address': '', 'Notes': '', '': ''},...

and I wanted to reconfigure it so that it matched django's serialization format.

I wrote this function to do it:

def re_serialize_reg_json():
    d = load_file()
    for i in d:
        d[i]['Name'] = d[i][' ']
        d[i]['pk'] = d[i]['ID']
        d[i]['model'] = 'homepage.territorymanager' 
        d[i]['fields'] = {
            'Name' : d[i]['Name'],
            'Cell' : d[i]['Cell'],
            'Email Address' : d[i]['email address'],
            'Notes' : d[i]['Notes'],
            'Distributor' : d[i]['Distributor'],
            'State' :d[i]['State'],
            'Brand' :d[i]['Brand'],
        }
        del d[i][' ']
        del d[i]['ID']
        del d[i]['Name']
        del d[i]['Cell']
        del d[i]['email address']
        del d[i]['Notes']
        del d[i]['Distributor']
        del d[i]['State']
        del d[i]['Brand']
        del d[i]['']

and it works fine: output:

{'1': {'pk': '1', 'model': 'homepage.territorymanager', 'fields': {'Name': 'Aaron Kirkus', 'Cell': '778-875-4983', 'Email Address': '', 'Notes': '', 'Distributor': 'National Energy', 'State': 'BC', 'Brand': 'Trane'}}, '2': {'pk': '2', 'model': 'homepage.territorymanager', 'fields': {'Name': 'Aaron Martin ', 'Cell': '267-246-0522', 'Email Address': '', 'Notes': '', 'Distributor': 'Pierce Phelps', 'State': 'PA', 'Brand': 'Bryant/Carrier'}},...

But I feel like it's not a very effective method for achieving this. Any ideas appreciated.

CodePudding user response:

A list to store some keys, and some loop, would make the code a lot nicer

def re_serialize_reg_json(d):
    for key, values in d.items():
        values.update({'Name': values[' '], 'pk': values['ID'], 'model': 'homepage.territorymanager'})
        f = ['Name', 'Cell', 'email address', 'Notes', 'Distributor', 'State', 'Brand']
        values['fields'] = {' '.join(w.capitalize() for w in k.split()): values[k] for k in f}
        for k in f   [' ', '', 'ID']:
            del values[k]
    return d
  • Related