2016-06-28 5 views
4

После использования библиотеки запросов, я получаю ниже Dict в response.json()Как удалить символы Юникода из словаря данных в Python

{u'xyz': {u'key1': None, u'key2': u'Value2'}} 

Я хочу, чтобы удалить все символы Юникода и печатать только ключевые пары значений без юникода символы

Я попытался ниже метод удаления, но он показывает искаженной строку

>>> import json, ast 
>>> c = {u'xyz': {u'key1': None,u'key2': u'Value2'}} 
>>> ast.literal_eval(json.dumps(c)) 

Getting «ValueError: искаженная строка»

Любое предложение о том, как это сделать?

+1

Является ли это Python3 или 2? –

+1

Какой результат вы хотите и почему? – RemcoGerlich

+0

попробуйте использовать 'json.dumps (c)' –

ответ

0

Вы можете использовать unicodestring.encode("ascii","replace")

>>> ustr=u'apple' 
>>> ustr 
u'apple' 
>>> astr=ustr.encode("ascii","replace") 
>>> astr 
'apple' 
+0

Спасибо, это сработало. – Maverick

3
не

Изменить Нет для «None»:

c = {u'xyz': {u'key1': 'None', u'key2': u'Value2'}} 

это вопрос отливка - аст любит ул-х

Кроме того, может быть, и хотят, чтобы изменить все Нет, чтобы опустошить ул или ул «None». .. Смотрите эту тему: Python: most idiomatic way to convert None to empty string? с этим кодом, я изменяет пустую строку 'None':

def xstr(s): 
    if s is None: 
     return 'None' 
    return str(s) 
+0

Затем он становится строкой с «None» как значением, полностью отличным от None. – RemcoGerlich

+0

правый, но ast работает для него –

-2

Я действительно не понимаю, зачем вам это нужно. Ваша переменная является обычным питоном Python с нормальными строками Unicode, и они, как представляется, печатаются как u'', чтобы отличить их от байтов, но это не имеет значения для их использования.

Если вы хотите сохранить их в виде строк, чтобы читать их как данные позже, JSON - прекрасный формат для этого. Поэтому нет необходимости называть функцию запроса .json() вообще, просто используйте атрибут ответа .text - это уже JSON, в конце концов.

Ваша попытка

>>> ast.literal_eval(json.dumps(c)) 

завершается, потому что вы первый превратить c в JSON снова, а затем попытаться разобрать его как литерал Python. Это не работает, потому что Python не JSON; в частности один имеет null, а другой имеет None.

Возможно, вы хотите изменить строки Unicode на байты? Как и путем кодирования их как UTF8, которые могли бы работать:

def to_utf8(d): 
    if type(d) is dict: 
     result = {} 
     for key, value in d.items(): 
      result[to_utf8(key)] = to_utf8(value) 
    elif type(d) is unicode: 
     return d.encode('utf8') 
    else: 
     return d 

Или что-то подобное, но я не знаю, почему вы это нужно.

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