2

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

2 Answers 2

10
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

Sign up to request clarification or add additional context in comments.

2 Comments

{"name":"Bobby null Tables"}
This will replace any occurrences of "null" in the JSON string, which is incorrect. As noted by Josh Lee in the comment above, for example, {"name":"Bobby null Tables"} would be changed to {"name":"Bobby "" Tables"}, probably not what you want.
2

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)

1 Comment

This looks like it will work, but the function name is confusing: although the function is calledreplaceNone, it will actually replace any dictionary value v with the specified value rv.

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.