This question already has an answer here:
jq not working on tag name with dashes and numbers
(1个答案)
去年关门了。
我有一个(不太复杂)json文件,需要使用bash提取它的内容。我想使用jq进行处理,应该很简单。问题是我在处理过程中遇到了一个奇怪的错误,我不知道该如何解决(因为我不知道是什么导致了这个错误)。
给我带来麻烦的最小样本:
{
  "E23763": {
    "data": "information"
  }
}

如果我只是运行jq来漂亮地打印它,它就会工作:
$ cat test.json | jq .
{
  "E23763": {
    "data": "information"
  }
}

但是,如果我尝试提取第一个字段,它将在脚本中失败:
$ cat test.json | jq .E23763
jq: error: Invalid numeric literal at EOF at line 1, column 7 (while parsing '.E23763') at <top-level>, line 1:
.E23763
jq: 1 compile error

预期的结果是:
{
  "data": "information"
}

有人发现类似的问题吗?当他真正研究字符串时,为什么它会抱怨一个数字文本?
这里的报价似乎无关紧要,同样的错误。

最佳答案

请参阅GitHub上的这个问题这里有很多回复,可能会帮助您解决问题:https://github.com/stedolan/jq/issues/1526
不过,我将在这里发布一个解决方案:

jq '.["E23763"]' test.json

@Inian说的另一个解决方案是:
jq '."E23763"' json

如果没有[],在本例中这是正确的解决方案,但请同时尝试这两种方法
基本上,解析器是错误的,并将.E作为数字的开头。

关于bash - 无法提取json字段的内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51325368/

10-16 11:02