【问题标题】:parse error: Invalid numeric literal at line 1, column 6解析错误:第 1 行第 6 列的数字文字无效
【发布时间】:2022-04-20 21:29:54
【问题描述】:

从命令行获取代码的 1 条线可以正常工作,但我在脚本中运行时遇到此错误。

我运行从命令行获取 TICKERD 的 1 班轮,这不会给我错误。

但是,我相信是因为数组中的数据为空?

curl -k -s https://api.earningscalendar.net/?date=20190518
[]
#!/bin/bash
for i in {1..15}
do
newdate=`/bin/date -v +"$i"d +%Y%m%d`
TICKERD=`curl -k -s https://api.earningscalendar.net/?date=$newdate | jq -r 'map([.ticker, .when] | join(", ")) | join("\n")' | grep -w "$1"`
TICKERA=`echo $TICKERD | cut -d, -f1`
if [ "$TICKERA" == "$1" ]
then
echo $TICKERD "is on" $newdate
exit
fi
done

错误信息:

./earnings.sh ADSK
parse error: Invalid numeric literal at line 1, column 6
parse error: Invalid numeric literal at line 1, column 6
parse error: Invalid numeric literal at line 1, column 6
parse error: Invalid numeric literal at line 1, column 6
ADSK, amc is on 20190523

【问题讨论】:

  • 也许你应该看看你得到什么作为回应?一旦你计算了那个日期,你可能会得到一些不是 json 的东西。 newdate 变量也是如此。

标签: json jq


【解决方案1】:

要调试问题,您可以检查“curl”命令产生的输出。当我在没有 jq 的循环中运行它时,输出经常是“稍后重试”,好像有某种节流。

可以考虑的类似替代方法是运行一个非常基本的 jq 程序,例如

#!/bin/bash
for i in {1..15}
do
    newdate=`/bin/date -v +"$i"d +%Y%m%d`
    echo newdate=$newdate
    curl -k -s "https://api.earningscalendar.net/?date=$newdate" | jq type
done

【讨论】:

    【解决方案2】:

    空数组不会导致您看到的错误消息。

    编辑:问题是 API 稍后返回重试为 @peak says。要解决此问题,只需添加 sleep 1 即可解决问题

    这是一个返回空数组但没有解析错误的示例 curl -k -s https://api.earningscalendar.net/?date=20190303 | jq -r 'map([.ticker, .when] | join(", ")) | join("\n")' | grep -w "$1"

    newdate=`date +%Y%m%d`
    curl -k -s https://api.earningscalendar.net/?date=$newdate | jq -r 'map([.ticker, .when] | join(", ")) | join("\n")' | grep -w "$1"
    

    输出

    ACB, amc
    TLRY, amc
    CYBR, bmo
    NEWR, amc
    AEYE, amc
    A, amc
    USAT, --
    RL, bmo
    HUD, bmo
    CATB, bmo
    ROSE, amc
    PAGS, amc
    HDB, --
    KOOL, amc
    CPIX, amc
    NLST, amc
    AUPH, amc
    VCTR, amc
    ONCE, --
    EVC, --
    FSM, amc
    JAPAY, --
    VLVLY, --
    RDSMY, --
    ZLNDY, --
    GNMSF, --
    DOX, amc
    PORBF, --
    GDS, bmo
    EGHT, amc
    BEST, bmo
    TAC, bmo
    TIER, --
    GOSS, bmo
    AZZ, bmo
    TRWH, amc
    MDOMF, --
    AUTL, bmo
    ROAN, amc
    CPLG, amc
    CTST, bmo
    DSSI, bmo
    IMXI, amc
    TCS, amc
    MIXT, bmo
    KDMN, --
    SFST, --
    ALLT, bmo
    ARA, --
    KMDA, bmo
    OCX, amc
    MXWL, --
    HYGS, bmo
    PANL, amc
    MTNB, bmo
    LIQT, bmo
    APTX, bmo
    REED, amc
    MRBK, --
    UQM, amc
    GECC, bmo
    TGEN, bmo
    ENT, amc
    MOGO, amc
    SLGG, amc
    EYEN, bmo
    HCAP, bmo
    WYY, amc
    BLRX, bmo
    SUNW, amc
    TST, bmo
    AYTU, bmo
    XELB, bmo
    ONTX, bmo
    FTD, --
    TCON, amc
    CYTR, --
    YOGA, amc
    DYNT, bmo
    CYCC, amc
    DARE, amc
    ESEA, --
    EMES, --
    ASCMA, --
    NSPR, bmo
    OPGN, amc
    AGHC, --
    LIOPF, --
    

    【讨论】:

    • 感谢您的意见。我打印了 newdate 并返回了所有 15 个日期,所以我知道它是有效的。将再次检查。
    • 查看峰值输入
    • 不确定,但我仍然继续收到相同的错误。 newdate 没有返回问题。我相信空数组被 [] 包围,这就是为什么错误可能会在 shell 中抛出。
    • 有趣的是,当我运行您的代码时,它不会对我产生任何错误
    • 错误不是由空数组引起的,我观察到了这种行为并在上面提供了一个示例,表明它在返回空数组时不会抛出错误
    猜你喜欢
    • 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
    相关资源
    最近更新 更多