【发布时间】:2020-11-21 21:26:08
【问题描述】:
我想使用 bash 生成的 uuid 在 json 对象之间插入新的 json 对象。
输入json文件test.json
{"name":"a","type":1}
{"name":"b","type":2}
{"name":"c","type":3}
输入 bash 命令uuidgen -r
目标输出json
{"id": "7e3ca7b0-48f1-41fe-9a19-092a62cba0dc"}
{"name":"a","type":1}
{"id": "3f793fdd-ec3b-4306-8153-12f3f9faf2c1"}
{"name":"b","type":2}
{"id": "cbcd759a-37e7-4da7-b7fe-7572f474ec31"}
{"name":"c","type":3}
插入新对象的基本 jq 程序
jq -c '{"id"}, .' test.json
输出json
{"id":null}
{"name":"a","type":1}
{"id":null}
{"name":"b","type":2}
{"id":null}
{"name":"c","type":3}
jq 程序插入从 bash 生成的 uuid:
jq -c '{"id" | input}, .' test.json < <(uuidgen)
不确定如何处理两个输入、用于在新对象中创建值的 bash 命令以及要转换的输入文件(插入每个对象之间的新对象)。
我想处理大小不超过几 GB 的 json 文件。
非常希望通过精心设计的解决方案获得一些帮助,该解决方案可以扩展大文件并快速高效地执行操作。
提前致谢。
【问题讨论】:
-
当您需要处理大量记录时,每个需要生成的 UUID 调用一次
uuidgen可能是其中最慢的部分。我可能会改用 Python,只是为了能够在进程中完成特定的部分。 -
...如果您真的想使用 jq+uuidgen,我可以建立一个答案,但它会比最佳速度慢很多,即使 jq 部分本身很快。
-
要处理大量的 json 文件,每个文件都需要一个包含 uuid 的标头对象以符合下游应用程序。努力使基本功能正常工作。
-
在我们构建一个更优雅的解决方案之前,它会在短期内真正帮助我
-
(顺便说一句,作为此处相互作用的一点背景——peak 是 Stack Overflow 最好的 jq 专家之一,是我从中学到很多东西的人;就我们竞争而言,竞争是一个非常友好的人)。