【问题标题】:curl | jq: parse error: Invalid numeric literal at line 2, column 0卷曲 | jq:解析错误:第 2 行第 0 列的数字文字无效
【发布时间】:2018-05-14 19:06:35
【问题描述】:

我有一个简单的 bash 文件,如下所示

    #!/bin/bash
    net=$(curl -s -H "Content-Type: application/json" -H "X-Auth-Token: $token" -d '{"network": {"name": "net1"}}' http://10.1.10.146:18090/network/v2.0/networks 2>&1 | awk '/id/{print $1}' | jq -r .network.id)
    echo $net

运行这个文件给我一个如下错误

    parse error: Invalid numeric literal at line 2, column 0

尝试根据这些链接进行更改 https://unix.stackexchange.com/questions/354943/setting-jq-output-to-a-bash-variable

Working with Bash and cURL

但没有任何帮助,无法弄清楚我哪里出错了。让我知道错误的原因和可能的更改。

命令的 curl 输出

    curl -s -H "Content-Type: application/json" -H "X-Auth-Token: $token" -d '{"network": {"name": "net1"}}' http://10.1.10.146:18090/network/v2.0/networks

输出:

    {"network":{"status":"ACTIVE","router:external":false,"availability_zone_hints":[],"availability_zones":[],"description":"","subnets":[],"shared":false,"tenant_id":"d0e75710820c401db3291ac6278f326f","created_at":"2018-05-15T07:37:42Z","tags":[],"ipv6_address_scope":null,"mtu":1450,"updated_at":"2018-05-15T07:37:42Z","admin_state_up":true,"revision_number":2,"ipv4_address_scope":null,"is_default":false,"port_security_enabled":true,"project_id":"d0e75710820c401db3291ac6278f326f","id":"1548df56-a35b-4232-9550-54a3c2266d60","name":"net1"}}

这个想法是只从输出中获取 id 并存储到一个 bash 变量中,我使用下面的命令来获取 id

     curl -s -H "Content-Type: application/json" -H "X-Auth-Token: $token" -d '{"network": {"name": "net1"}}' http://10.1.10.146:18090/network/v2.0/networks 2>&1 | awk '/id/{print $1}' | jq -r .network.id

输出:

    be831582-90c1-499c-875f-9c0b0d1969a6

我也尝试删除 awk 并解析 curl json 响应,出现同样的错误。

提前致谢。

【问题讨论】:

  • 显示curl 输出。
  • 编辑了问题,现在可以在问题中查看curl的输出了
  • 根本不要使用awk。让jq 为您解析curl 检索到的所有 JSON。
  • 另请注意curl 输出包含 DOS 行结尾。 jq 可能对此没有任何问题,但将输出传送到其他 Linux 实用程序会产生令人惊讶的结果。
  • @vidyadharreddy,没有只是 curl 输出。我们需要在 awk 和 jq 之前查看原始 JSON。

标签: bash shell curl


【解决方案1】:

出现“解析错误”消息是因为 2>&1 将任何 STDERR 消息重定向到无法解析它的 jq。比较这些命令的输出:

> 卷曲 http://no.such.host/network/v2.0/networks 2>&1 curl:(6)无法解析主机:no.such.host > 卷曲 http://no.such.host/network/v2.0/networks 2>&1 | jq'。 解析错误:第 1 行第 4 列的数字文字无效

这里有一些想法:

  • 将所有管道命令分成单独的命令。
  • 尝试在脚本顶部附近添加set -x 以“调试”所有 命令。
  • 删除2>&1,因为它对您没有帮助!
  • 为单独的命令添加错误处理。

如果您提供 curl 输出,我们可以提供更多帮助。 (我们没有对 10.1.10.146 主机的 HTTP 访问权限。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多