我在解析这个包含数组作为其最外层元素的json时遇到了问题:
response=[ { "__type": "File", "name": "...tfss-ea51ec70-d3a8-45e5-abbf-294f2c2c81f0-myPicture.jpg", "url": "http://files.parse.com/ac3f079b-cacb-49e9-bd74-8325f993f308/...tfss-ea51ec70-d3a8-45e5-abbf-294f2c2c81f0-myPicture.jpg" } ]
for blob in $response
do
url=$(echo $blob | json url)
done
但是这最后一次json解析会产生一系列错误:
json: error: input is not JSON: Bad object at line 2, column 1:
^
我是否需要做一些特别的事情来将JSON数组转换为bash数组,反之亦然?
答案 0 :(得分:3)
你应该引用reponse
的值来保护它免受shell试图解释它:
response='[ { "__type": "File", "name": "...tfss-ea51ec70-d3a8-45e5-abbf-294f2c2c81f0-myPicture.jpg", "url": "http://files.parse.com/ac3f079b-cacb-49e9-bd74-8325f993f308/...tfss-ea51ec70-d3a8-45e5-abbf-294f2c2c81f0-myPicture.jpg" } ]'
并且你不能期望shell能够解析JSON,因此for blob in $response
无法解决问题。根据{{3}},使用-a
应该处理数组:
while read url ; do
# use $url here...
done < <(echo "$response" | json -a url)
答案 1 :(得分:0)
将你的json放入一个文件并通过jsontool管道之后它运行得很好,所以我猜你的文件有一些奇怪的空白在jsontool中打破。
请改为尝试:
cat your_file.json | sed 's/[[:space:]]\+$//' | json