2017-06-05 15 views
0

は、私が解析しようとしています応答から出力されます:なぜシェル/ 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というシェル変数に応答を格納し、このような名前に基づいて、それから値を取得できることを期待しています:

$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

はこれを試してください:あなたのJSONが最初にリストしてから辞書であるので、あなたは、インデックスを最初にして、リスト、辞書のキーを必要とするので

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

です。

また、JSONはその値ではなく、そのキーでのみインデックスできます。

+0

もっと見る - ありがとう!形式が私がPythonで達成したいものと矛盾していることを知り始めました。私は本質的に1つのライナーがk = vのペアを出力することを望む。私はJSONのプロバイダではなく、毎回同じ順序で線が出るという保証はないので、指標による作業は厳しいものになるでしょう。おそらくsedコマンドでうまくいくでしょう! – Seer

関連する問題