2015-04-23 2 views
0

Я использую сторонний API, который дает мне ответ JSON.Пустая строка JSON до нуля

Ответ образец

{ 
    "peopleList":[ 
     { 
     "name":"Jack", 
     "age":26, 
     "creditcard":"12335435345" 
     }, 
     { 
     "name":"Arya", 
     "age":22, 
     "creditcard":"" 
     }, 
     { 
     "name":"Rob", 
     "age":16, 
     "creditcard":"" 
     } 
    ], 
    "responseTime":0.02, 
    "error":"" 
} 

Здесь empty string используется для представления No Value, который я думаю, должно быть нулевым.
Как заменить все значения пустые строки на null с помощью python?

Edit:
Я использую Django служить JSON к моему КСН App, который находится в Swift. Следовательно, хотя пустая строка является ложной в python, она не является быстрой.

Или еще лучше. Как удалить все ключи с пустой строкой?

Примечание: Структура JSON неизвестна.

+1

Вы действительно хотите это сделать? Почему бы не использовать [ложное поведение пустой строки] (http://stackoverflow.com/questions/9573244/most-elegant-way-to-check-if-the-string-is-empty-in-python)? То же, что 'null' /' None' является ложным в Python. –

+3

Это довольно плохая практика со стороны производителя JSON - если нет ошибки, не добавляйте ее в качестве ключа. В дополнение к ответу Vineet вы могли бы вместо этого удалить элемент из dict, а не устанавливать его в «None», что делает ваше намерение более ясным IMHO. – wonderb0lt

+0

Я отредактировал свой ответ. Должен работать для вас. –

ответ

3
data = json.loads(**your raw json string**) 
nullify(data) 

def nullify(container) : 
for key in container: 
     if type(key) == list: 
       nullify(key) 
     elif type(key) == dict: 
       nullify(key) 
     elif type(container[key]) == dict or type(container[key]) == list: 
       nullify(container[key]) 
     elif container[key] == '': 
       container[key] = None 

Я считаю, что это должно сработать для вас. Кроме того, в python нет null. Вместо этого вы можете использовать None.

****** ****** EDIT

Чтобы удалить ключ в целом вы должны использовать container.pop(key,None). Однако вы не можете сделать это в середине итерации, поэтому вы должны хранить все такие ключи в списке, а затем выталкивать их из словаря.

+0

Ваш метод не выполняется, если ключ не является целым числом. Это не выполняется для первого 'if' clause' if container [key] == '': 'Он дает' TypeError: индексы списка должны быть целыми числами, а не dict' – Kaunteya

+0

@Kaunteya сделал изменение. Теперь он должен работать –

Смежные вопросы