【发布时间】:2017-06-12 23:21:21
【问题描述】:
我想将 linux jq 调用的输出解析为一个 python 脚本,该脚本将解码输出 jq json str 并对其进行处理。
我的jq 调用jq '.geometry' myJson.json 的输出是这样的:
{
"coordinates": [
[
[
5,
2
],
[
5.4,
3
],
[
3,
2.1
]
]
],
"crs": {
"properties": {
"name": "foo"
},
"type": "name"
},
"type": "Polygon"
}
我写了一个小的python可执行文件,将输出的json字符串解码成python对象,然后做一些事情:
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)
我尝试这样称呼它:
jq '.geometry' geoJson.json | myPythonProgram
但是,如上面的代码 sn-p 中所述,我遇到了一些 python 错误。我认为这是我将jq 输出传递到我的python 可执行文件的方式。不知何故,整个 json 字符串没有作为argv 参数被拾取。
我的第一个错误是print GeoJsonStr 从argv[1:] 打印出一个空的[] 切片。所以我可能错误地将 json 字符串传递到 python 脚本中。随后的错误是:
coordinates = data['coordinates']
TypeError: list indices must be integers, not str
这可能或多或少是因为没有要解码的东西。
【问题讨论】:
-
如果您遇到错误,您需要在此处包含它们。
-
可能和How to make a python script "pipeable" in bash?问同样的问题也许这个问题会有所帮助