2017-02-01 2 views
2

У меня есть эта строка:Python сделать строку JSON загружаемый

> x.data 
u'{u"orderNumber": u"69898327728", u"resultingTrades": []}' 

Как я могу преобразовать его в json? Это не работает:

> import json 
> json.dumps(x.data) 
'"{u\\"orderNumber\\": u\\"69898327728\\", u\\"resultingTrades\\": []}"' 

Это просто создает длинную строку. Мне нужно, чтобы преобразовать его в формат JSON, так что позже я могу сделать json.loads и получить доступ к ключам в Словаре, например:

y = json.loads(x.data)["orderNumber"] 
+2

То, что вы начали с это Python * магнезии * строка. Вы можете использовать 'ast.literal_eval()', чтобы преобразовать его в словарь напрямую. Вам не нужно проходить JSON вообще. – Keith

ответ

2

Проблема, которую я вижу с вашей строки в том, что он содержит формат питон u"" для ключей.

Теперь, если вы доверяете своей строке и знаете, что она останется в этом формате, вы можете использовать eval(x.data), чтобы вернуть словарь, но eval очень опасен.

json.loads(json.dumps(eval(a))) 

Если бы я тебя, я бы приложить больше усилий в убедившись, что вы получите лучшую строку для обработки, если это в ваших силах.

Если нет, вы можете попробовать удалить котировки и u вручную.

data = x.data.replace('u"', "") 
data = data.replace('"', "") 
json.loads(json.dumps(data)) 
+0

Если у вас есть шанс использовать '' eval'' или '' ast.literal_eval', я бы пошел с последним. Это кажется более безопасным. – NuclearPeon

2

Вы можете использовать ast.literal_eval для преобразования данных в dict:

>>> import ast 
>>> data = u'{u"orderNumber": u"69898327728", u"resultingTrades": []}' 
>>> d = ast.literal_eval(data) 
>>> d['orderNumber'] 
u'69898327728' 

Затем вы можете использовать dumps и loads обычно:

>>> import json 
>>> ext = json.dumps(d) 
>>> ext 
'{"orderNumber": "69898327728", "resultingTrades": []}' 
>>> json.loads(ext)['orderNumber'] 
u'69898327728' 
Смежные вопросы