pppp
pppp

Reputation: 677

Python replace None values in nested JSON

I have been trying to wrap my head around replacing the None values in the JSON dictionary below. How would I traverse this json, and replace the "None" values with empty strings? I'm having difficulty understanding how to traverse nested json. Would love if someone can help me with this. Example nested json below. OR is there a way to replace values (such as from None to empty string) when using doing a "get" request with the Requests library in python?

{  
   'house':{  
      'amount':'$0.00',
      'id':1,
      'value':0.0
   },
   'event':'12.199.136.146',
   'location':'',
   'language':{  
      'language_name':'English',
      'language_id':1,
      'language_symbol':None
   },
   'percentage':1.0,
   'identification':'',
   'source':{  
      'name':'john',
      'id':-1
   },
   'paid':{  
      'amount':'$0.00',
      'format':1,
      'value':0.0
   },
   'score':None
}

Upvotes: 2

Views: 16862

Answers (2)

Harper Koo
Harper Koo

Reputation: 627

Try it:

#!/usr/bin/python3
import json
from pprint import pprint

jstr = {  
   'house':{  
      'amount':'$0.00',
      'id':1,
      'value':0.0
   },
   'event':'12.199.136.146',
   'location':'',
   'language':{  
      'language_name':'English',
      'language_id':1,
      'language_symbol':None
   },
   'percentage':1.0,
   'identification':'',
   'source':{  
      'name':'john',
      'id':-1
   },
   'paid':{  
      'amount':'$0.00',
      'format':1,
      'value':0.0
   },
   'score':None
}

data_str = json.dumps(jstr)
data = json.loads(data_str)
pprint(data)


def replaceNone(data_dict,v,rv):
    for key in data_dict.keys():
        if data_dict[key] == v:
            data_dict[key] = rv
        elif type(data_dict[key]) is dict:
            replaceNone(data_dict[key],v,rv)


replaceNone(data,None,"")
pprint(data)

Upvotes: 2

宏杰李
宏杰李

Reputation: 12158

import json

r = json.dumps(j).replace('null', '""')
json.loads(r)

out:

 {'event': '12.199.136.146',
 'house': {'amount': '$0.00', 'id': 1, 'value': 0.0},
 'identification': '',
 'language': {'language_id': 1,
  'language_name': 'English',
  'language_symbol': ''},
 'location': '',
 'paid': {'amount': '$0.00', 'format': 1, 'value': 0.0},
 'percentage': 1.0,
 'score': '',
 'source': {'id': -1, 'name': 'john'}}

convert it to string and replace null(string) to "", and load it back to python dict

Upvotes: 10

Related Questions