如何获取包含多个json的目录中每个json文件元素的长度

How do I get the length of elements of each json file in directory containing several jsons

提问人:anantha 提问时间:10/14/2023 更新时间:10/14/2023 访问量:45

问:

我有一个目录,只有 json 文件,每个文件至少有 1 个元素

foo.json
bar.json
baz.json

我想使用上面的 json 文件创建一个新的 json 数组,我可以使用以下内容:

ls | jq -R '{name: split("\\n") | .[]}' | jq -s '.'

其结果为:

[
  {
    "name": "foo.json"
  },
  {
    "name": "bar.json"
  },
  {
    "name": "baz.json"
  }
]

但是我需要的是每个json文件对应的相应元素的长度以及名称,如下所示:

[
  {
    "name": "foo.json",
    "size": 5
  },
  {
    "name": "bar.json",
    "size": 10
  },
  {
    "name": "baz.json",
    "size": 15
  }
]

此命令仅提供 json 的大小,而不与实际文件名进行任何映射

jq -s 'map(length) ' ./*.json

喜欢:

[
  5,
  10,
  15
]
  

任何指示将这两个命令合并并以更好的方式发展以获得上述预期输出的指针将不胜感激

尝试通过以下方式为每个元素添加大小

ls | jq -R '{name: split("\\n"), size: map(length) | .[]}'

但导致迭代错误

数组 字典 合并 jq 元素

评论


答:

1赞 pmf 10/14/2023 #1

ls不适合解析。相反,您可以在对 jq 的一次调用中直接遍历所有文件,例如使用 ,并使用 获取每个文件名。例如:inputsinput_filename

jq -n 'reduce inputs as $in ([]; . + [{
  name: input_filename,
  size: $in | length
}])' *.json

评论

0赞 anantha 10/14/2023
再次感谢@pmf。这也完全符合我想要的,不得不接受菲利普的回答,因为它是第一位的。非常感谢
1赞 Philippe 10/14/2023 #2

您可以使用以下文件来获取文件名:input_filename

jq -n '[inputs | { name: input_filename, size: length }]' *.json

评论

0赞 anantha 10/14/2023
非常感谢@Philippe。正是我想要的