我使用redis将所有数据存储在我的小型Web应用程序中,格式为python dict或json对象。
所以我将它们作为纯字符串存储在redis中,并希望将它们作为dict / json对象转换后再使用。
但我发现我可以使用python eval将该字符串转换为dict,但不能使用json.loads()。
从下面的代码来看,似乎是因为从redis读取的字符串格式无法提供json,因此可以使用json.loads(json.dumps(data_in_redis))
进行转换。
这是我关心的问题
eval
不是明智的选择,还有其他方法可以将此格式的字符串序列化为json json.loads(json.dumps(data_in_redis))
,这会浪费一些时间,因为它需要首先转储数据。非常感谢
In [6]: data_in_redis = r.hmget('dash_meta', '8')[0]
In [7]: data_in_redis
Out[7]: "{'id': 8, 'author': 'author-author', 'name': 'name-name', 'time_modified': 1444958866, 'desc': 'desc'}"
In [8]: eval(data_in_redis)
Out[8]:
{'author': 'author-author',
'desc': 'desc',
'id': 8,
'name': 'name-name',
'time_modified': 1444958866}
In [10]: import json
In [11]: json.loads(data_in_redis)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-11-3f228e0cf408> in <module>()
----> 1 json.loads(data_in_redis)
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.pyc in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
336 parse_int is None and parse_float is None and
337 parse_constant is None and object_pairs_hook is None and not kw):
--> 338 return _default_decoder.decode(s)
339 if cls is None:
340 cls = JSONDecoder
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.pyc in decode(self, s, _w)
364
365 """
--> 366 obj, end = self.raw_decode(s, idx=_w(s, 0).end())
367 end = _w(s, end).end()
368 if end != len(s):
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.pyc in raw_decode(self, s, idx)
380 """
381 try:
--> 382 obj, end = self.scan_once(s, idx)
383 except StopIteration:
384 raise ValueError("No JSON object could be decoded")
ValueError: Expecting property name: line 1 column 2 (char 1)
In [12]: json.dumps(data_in_redis)
Out[12]: '"{\'id\': 8, \'author\': \'author-author\', \'name\': \'name-name\', \'time_modified\': 1444958866, \'desc\': \'desc\'}"'
In [13]: json.loads(_)
Out[13]: u"{'id': 8, 'author': 'author-author', 'name': 'name-name', 'time_modified': 1444958866, 'desc': 'desc'}"
In [14]:
答案 0 :(得分:2)
你应该知道很多事情:
json.dumps
eval
不应该在这里使用。如果您需要处理格式错误的数据,请使用ast.literal_eval