私は、jq
というLinuxの出力を解析して、jq
json strをデコードしてそれを処理するpythonスクリプトを作りたいと思っています。入力argv jsonの文字列を解析する
私jq
コールjq '.geometry' myJson.json
の出力は次のようなものです:
import collections
import json
import sys
import logging
if __name__ == '__main__':
try:
geoJsonStr = str(sys.argv[1:])
print geoJsonStr ## This for some reason only prints an empty slice '[]'
data = json.loads(geoJsonStr)
coordinates = data['coordinates'] ## TypeError: list indices must be integers, not str
## Do things here
except ValueError as e:
logging.error(e.message)
exit(1)
:私はPythonオブジェクトへの出力JSON文字列をデコードして、物事を行う小規模のpythonの実行可能ファイルを書かれている
{
"coordinates": [
[
[
5,
2
],
[
5.4,
3
],
[
3,
2.1
]
]
],
"crs": {
"properties": {
"name": "foo"
},
"type": "name"
},
"type": "Polygon"
}
これは私がそれを呼び出す方法です:
jq '.geometry' geoJson.json | myPythonProgram
しかし私は上の私のコードスニペットに記載されているようにいくつかのpythonエラーが発生しています。私はそれが私のpython実行可能ファイルにjq
の出力を渡している方法だと思っています。どういうわけか、json文字列全体がargv
引数として取り上げられていません。
私の最初のエラーは、print GeoJsonStr
が、argv[1:]
から空の[]
スライスをプリントアウトすることです。だから私はおそらく間違ってpythonスクリプトにjsonの文字列を渡している。後続のエラーがある:
coordinates = data['coordinates']
TypeError: list indices must be integers, not str
デコードするものは何もなかったので、これはおそらく、多かれ少なかれです。
ますもしあなたが直接、上記の例のようにSTDIN読み、または
json.load
の引数として直接sys.stdin
を渡すことができ、あなたの特定のケースではエラーが表示されたら、ここにそれらを含める必要があります。 – Carcigenicate
おそらく、[bashでpythonスクリプトを "pipeable"にする方法は?](https://stackoverflow.com/questions/4429966/how-to-make-a-python-script-pipeable-in- bash)おそらくその質問が役に立ちます –