无效数值文字与JQ

问题描述:

我有一个第三方系统的大量JSON的,我想预先处理有JQ,但我有困难撰写查询,测试情况如下:无效数值文字与JQ

$ cat test.json 
{ 
    "a": "b", 
    "c": "d", 
    "e": { 
     "1": { 
      "f": "g", 
      "h": "i" 
      } 
     } 
} 
$ cat test.json|jq .e.1.f 
jq: error: Invalid numeric literal at EOF at line 1, column 3 (while parsing '.1.') at <top-level>, line 1: 
.e.1.f 

我如何在这里得到“g”作为我的输出?或者,我该如何将1转换为“1”,以便正确处理?

jq manual

使用语法类似于对象的

还可以查找字段[“foo”的] (包含.foo以上就是一个速记版本,但仅用于 标识符等。字符串)。

您还需要报价和使用-r如果你想原始输出:

jq -r '.e["1"].f' test.json 
+0

完美的感谢 - 我已经尝试了一些东西,但它从来没有发生,我认为我会需要使用“内部”。 – Gaius

+2

您不一定需要使用方括号,它可能很简单:'.e。“1”.f' –