2015-01-06 4 views
1

나는 hget으로 redis에서 데이터를 얻었다.python redis hget 문자열을 dict로

data = ss.hget("users", "inmove"); 

데이터 유형은 str입니다.

type(data): 
"{u'free_tickets': 2, u'payment_tickets': 1200, u'last': 1420560000, u'user_id': u'inmove'}" 

내가 json.loads (데이터)를 사용하는 경우, 오류가

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib64/python2.6/json/__init__.py", line 307, in loads 
     return _default_decoder.decode(s) 
    File "/usr/lib64/python2.6/json/decoder.py", line 319, in decode 
     obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/usr/lib64/python2.6/json/decoder.py", line 336, in raw_decode 
     obj, end = self._scanner.iterscan(s, **kw).next() 
    File "/usr/lib64/python2.6/json/scanner.py", line 55, in iterscan 
     rval, next_pos = action(m, context) 
    File "/usr/lib64/python2.6/json/decoder.py", line 171, in JSONObject 
     raise ValueError(errmsg("Expecting property name", s, end)) 
    ValueError: Expecting property name: line 1 column 1 (char 1) 

답변

3

사용 ast.literal_eval, 당신의 문자열 데이터는 JSON가 없습니다, 그것은 파이썬 딕셔너리의 문자열 표현입니다.

>>> my_str = "{u'free_tickets': 2, u'payment_tickets': 1200, u'last': 1420560000, u'user_id': u'inmove'}" 
>>> from ast import literal_eval 
>>> my_dict = literal_eval(my_str) 
>>> my_dict.keys() 
[u'last', u'user_id', u'free_tickets', u'payment_tickets'] 
관련 문제