为什么我不能使用shell / python解析这个JSON输出?

时间:2017-06-05 10:17:22

标签: json python-2.7 shell

以下是我尝试解析的响应的输出:

[{"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 - 有人可以向我指出问题吗?根据我在这里看到的所有其他答案,这似乎是一种相当标准的方法 - 所以嵌套值部分可能是问题吗?

1 个答案:

答案 0 :(得分:4)

试试这个:

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

这是因为你的JSON首先是一个列表然后是一个字典,所以你需要首先索引列表然后索引字典的密钥。

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