首页 > 解决方案 > Jq 解析错误:第 1 行第 9 列的数字文字无效

问题描述

我正在尝试使用 curl 从 url 从 json 文件中获取值,然后使用 jq 命令(例如公司)打印特定键。不幸的是,当我使用: jq '.[] | .company' JB.json 我得到错误: parse error: Invalid numeric literal at line 1, column 9。我用less检查了下载的文件,它看起来与url中的完全一样。

有些人建议使用 -R 选项,但它会打印: jq: error: Cannot iterate over string

该文件的网址是:https ://jobs.github.com/positions.json?description=python&location=new+york

标签: jsonbashshellcurljq

解决方案


如果您用于curl -sS检索文件,则会跳过“//”样式的注释:

curl -Ss 'https://jobs.github.com/positions.json?description=python&location=new+york' | jq '.[] | .company' 
"BentoBox"
"Aon Cyber Solutions"
"Sesame"
"New York University"

所以大概您的 JB.json 包含“//”样式的注释。最简单的解决方法可能是首先过滤掉前两行(例如使用sed(或jq!))。

这是一个仅限 jq 的解决方案:

< JB.json jq -Rr 'select( test("^//")|not)' |
   jq '.[] | .company' 

推荐阅读