2017-06-05 119 views
0

这里是我试图解析响应输出:为什么不能使用shell/python解析这个JSON输出?

[{"name":"UsedMemory","value":{"value":"35054384","type":"java.lang.Long"}}, 
{"name":"FreeMemory","value":{"value":"7085264","type":"java.lang.Long"}},{"name":"Heap","value":{"value":"42139648","type":"java.lang.Long"}},{"name":"UpTime","value":{"value":"3350544","type":"java.lang.Long"}},{"name":"ProcessCPU","value":{"value":"0.3625301325982962","type":"java.lang.Double"}},{"name":"GcCount","value":{"value":"224","type":"java.lang.Long"}},{"name":"GcTime","value":{"value":"335","type":"java.lang.Long"}}] 

我存储在名为$ jvmStats shell变量的响应,并期望能够基于这样的名字来自它检索值:

$jvmStats | python -c "import sys, json; print json.load(sys.stdin)['UsedMemory']" 

,但我得到的回应是:

Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
TypeError: list indices must be integers, not str 

很新的JSON的,不幸的是没有使用JQ的能力在这个系统上 - 有人能指出这个问题吗?根据我在这里看到的所有其他答案,这似乎是一个相当标准的方法 - 所以也许嵌套的值部分是问题?

回答

4

试试这个:

jvmStats | python -c "import sys, json; print json.load(sys.stdin)[0]['name']" 

这是因为你的JSON是第一个列表,然后一本字典,所以你需要索引列表,然后再字典的关键。

此外,您只能通过其索引来索引JSON,而不能索引它的值。

+0

看起来更好 - 谢谢!开始看到该格式与我想通过python实现的内容不一致。我基本上想要一个班轮输出一堆k = v对。我不是JSON的提供者,也不能保证每次都会以相同的顺序发布相应的命令 - 因此按索引执行操作将会非常困难。我用sed命令可能会更好! – Seer

相关问题