2013-03-12 72 views
1

子表我有这个字符串:分割字符串可以用Python

"{'osFreeMem': 286494720, 'osUpTime': 19230718, 'sysload': [0.24609375, 0.62109375, 0.734375], 'nodeUpTime': 1831, 'osTotMem': 536870912, 'nodeMemory': {'heapTotal': 8766304, 'heapUsed': 7789588, 'rss': 22773760}}" 

我想有这些值的字典:

'osFreeMem': 286494720 
'osUpTime': 19230718 
'sysload': [0.24609375, 0.62109375, 0.734375]  
'nodeUpTime': 1831 
'osTotMem': 536870912  
'nodeMemory': {'heapTotal': 8766304, 'heapUsed': 7789588, 'rss': 22773760} 

如何我能得到这个名单?

+1

你不要任何理由要使用JSON解析器? – 2013-03-12 12:23:47

+1

你从哪里得到那个字符串?你可能直接获取数据。如果您无法直接获取数据,我会将单引号切换为double并将其解析为JSON。 – 2013-03-12 12:24:09

+0

我通过websocket从服务器获取它。我怎样才能解析它与JSON PARSER? – 2013-03-12 12:26:29

回答

-1

您还可以使用内置的功能EVAL

>>>d = eval("{'osFreeMem': 286494720, 'osUpTime': 19230718, 'sysload': [0.24609375, 0.62109375, 0.734375], 'nodeUpTime': 1831, 'osTotMem': 536870912, 'nodeMemory': {'heapTotal': 8766304, 'heapUsed': 7789588, 'rss': 22773760}}") 
>>>d 
{'osFreeMem': 286494720, 'osUpTime': 19230718, 'sysload': [0.24609375, 0.62109375, 0.734375], nodeUpTime': 1831, 'osTotMem': 536870912, 'nodeMemory': {'heapTotal': 8766304, 'heapUsed': 7789588, 'rss': 22773760}} 
+1

你可以,但你**不应该**,因为[eval是危险的](http://nedbatchelder.com/blog/201206 /eval_really_is_dangerous.html) – root 2013-03-12 12:58:50

+0

只有在允许用户输入信息的情况下才有危险。否则,它与其他可能用于执行命令的命令(如命令模块) – 2013-03-12 13:14:43

+0

感谢一样危险。有用! 我只需要这样做: x = ast.literal_eval(message) result = map(lambda item:item [0] +':'+ str(item [1]),x.items()) – 2013-03-12 15:01:55

5
In [37]: s = "{'osFreeMem': 286494720, 'osUpTime': 19230718, 'sysload': [0.24609375, 0.62109375, 0.734375], 'nodeUpTime': 1831, 'osTotMem': 536870912, 'nodeMemory': {'heapTotal': 8766304, 'heapUsed': 7789588, 'rss': 22773760}}" 

In [38]: import ast 

In [39]: d = ast.literal_eval(s) 

In [40]: d 
Out[40]: 
{'nodeMemory': {'heapTotal': 8766304, 'heapUsed': 7789588, 'rss': 22773760}, 
'nodeUpTime': 1831, 
'osFreeMem': 286494720, 
'osTotMem': 536870912, 
'osUpTime': 19230718, 
'sysload': [0.24609375, 0.62109375, 0.734375]} 

In [41]: d.items() 
Out[41]: 
[('osFreeMem', 286494720), 
('osUpTime', 19230718), 
('sysload', [0.24609375, 0.62109375, 0.734375]), 
('nodeUpTime', 1831), 
('osTotMem', 536870912), 
('nodeMemory', {'heapTotal': 8766304, 'heapUsed': 7789588, 'rss': 22773760})] 

In [44]: import json 

In [45]: json.loads(s.replace("'",'"')).items() 
Out[45]: 
[(u'osFreeMem', 286494720), 
(u'osUpTime', 19230718), 
(u'sysload', [0.24609375, 0.62109375, 0.734375]), 
(u'nodeUpTime', 1831), 
(u'osTotMem', 536870912), 
(u'nodeMemory', {u'heapTotal': 8766304, u'heapUsed': 7789588, u'rss': 22773760})] 
+0

+1对于'literal_eval' - 不相信替换引号和使用'json'虽然 – 2013-03-12 12:38:50