Windows10下jq1.5执行JSON转换时遇「Invalid numeric literal」错误求助
解决jq 1.5在Windows 10下的「Invalid numeric literal」错误
我来帮你一步步排查这个jq错误的问题,这个「Invalid numeric literal」错误通常和JSON格式、命令语法或者环境转义有关,咱们逐个分析:
先补全并验证你的jq命令完整性
从你给出的命令来看,结尾是cabi...明显被截断了,这种不完整的语法会直接导致jq解析失败,触发无效字面量的提示。你需要先把完整的过滤逻辑补全,确保所有的大括号{}、小括号()都正确配对,管道符|和合并运算符+的使用符合jq的语法规则。比如你嵌套处理.cabins[]的部分,要保证每一层的结构都闭合。检查输入JSON的合法性
这个错误最常见的原因是你要处理的JSON本身存在格式问题,比如:- 数字格式不符合JSON规范(比如开头是0的整数、包含非法字符的数字)
- 字符串使用了单引号(JSON要求必须用双引号)
- 键值对末尾多了逗号,或者结构层级不匹配
你可以先用jq自带的校验功能快速检查输入JSON:
C:\import\Dreamlines\jq.exe . 你的输入JSON文件名.json如果这个命令报错,会直接指出JSON格式错误的具体位置,先修复这个问题再执行转换命令。
处理Windows命令行的特殊字符转义问题
Windows的CMD或PowerShell会对|、>、&等字符做特殊解析,直接在命令行输入长jq命令很容易出现转义错误。推荐的解决方法是:- 把完整的jq过滤逻辑保存成一个后缀为
.jq的脚本文件,比如transform.jq,内容示例(补全你缺失的部分):[{ nid, includesservices: .includedServices, title, nights, company: .operator.shortTitle, zone: .zones[0].title, schiffsbeschreibung: .ship.factsAndFigures } + (.sails[] | ({ sails_nid: .nid, arrival, departure } + (.cabins[] | { cabinname: .cabinType.title, cabintype: .cabinType.kindName, cabinprice: .price })))] - 然后用jq执行这个脚本:
C:\import\Dreamlines\jq.exe -f transform.jq 你的输入JSON文件名.json
这样可以完全避免命令行转义带来的问题。
- 把完整的jq过滤逻辑保存成一个后缀为
考虑升级jq版本
你使用的jq 1.5是比较旧的版本,存在一些已知的解析bug和兼容性问题。可以尝试升级到最新的稳定版(比如jq 1.6或更高),下载对应Windows架构的版本替换现有文件,再测试你的转换命令。
内容的提问来源于stack exchange,提问作者TimoC
相关产品推荐
相关产品推荐

