2017-05-01 70 views
1

我想在bash文件中使用curl进行GET请求。 所以我打电话给curl,并从我的服务器获得JSON响应,并且我尝试获取作为响应一部分的对象,并且我使用jq,因此我可以打印该值。 但它不工作。'。“line”'不被jq接受为有效的语法 - “意外的INVALID_CHARACTER”

我的回答是这样的:

{"line":"Azul", "id":"j3453j45n35", "lat":"39.091937", "long":"-9.265441"} 

我的bash脚本:

#!/bin/bash 
while : 
do 
    cmd=$(curl -i -H "Content-Type: application/json" http://localhost:8080/cards/exists/1 | jq ‘.”line”’) 
    sleep 2 
done 

结果:

jq: error: syntax error, unexpected INVALID_CHARACTER, expecting $end (Unix shell quoting issues?) at , line 1: ‘.”line”’ jq: 1 compile error (23) Failed writing body

打算怎么啦? 我遵循大量的反馈人们建议在线,但我不断得到相同的回应。 我的json对象似乎是正确的。 我在MacOS塞拉利昂运行此文件

回答

3

有两个问题与您的代码:

  • 您使用非ASCII报价‘ ” ” ’),其中jq不明白:

    • 用的ASCII码值替换它们:' " " '
    • 在MacOS,避免一个文本编辑器如T他打开了“智能报价”功能的标准TextEdit.app,或者通过菜单系统关闭该功能:Edit > Substitutions > Smart Quotes
      正是此功能取代了ASCII引用字符。与他们的非ASCII,印刷当量,,你输入
    • 通常,考虑使用专用的源代码编辑器来编辑代码,例如Visual Studio Code(免费)或Atom(免费)或Sublime Text(付费)。
  • curl命令包括输出(-i,这jq扼流圈 - 简单地忽略-i

#!/bin/bash 

while :; do 
    cmd=$(curl -H 'Content-Type: application/json' 'http://localhost:8080/cards/exists/1' | 
      jq '.line') 
    sleep 2 
done 

虽然'."line"'将有太多的工作,没有必要为简单的属性na引用额外的层mes就是这样。

此外,最好在shell中将你想要解释的字符串包含在'...'中。

相关问题