【发布时间】:2021-05-26 09:03:48
【问题描述】:
如果我有这样内容的文件:
{"id":"doi-platelemetry-doi/doiplatelemetry","name":"doi/doiplatelemetry","location":"doi/doiplatelemetry/2.0.0/doiplatelemetry:2.0.0_49","component":"doi","tag":"2.0.0_49"},{"id":"doi-maintenance-service-doi/maintenance-service","name":"doi/maintenance-service","location":"doi/1.0.0/maintenance-service:1.0.0.681","component":"doi","tag":"1.0.0.681"}
我们如何仅在位置字段的值中将所有/ 替换为-?意思是,替换后的文件内容应该是:
{"id":"doi-platelemetry-doi/doiplatelemetry","name":"doi/doiplatelemetry","location":"doi-doiplatelemetry-2.0.0-doiplatelemetry:2.0.0_49","component":"doi","tag":"2.0.0_49"},{"id":"doi-maintenance-service-doi/maintenance-service","name":"doi/maintenance-service","location":"doi-1.0.0-maintenance-service:1.0.0.681","component":"doi","tag":"1.0.0.681"}
使用jq 可以很容易地实现这一点,但我正在寻找一种即使在jq 等工具不可用时也能正常工作的解决方案。
【问题讨论】:
-
请在您的问题中以代码的形式添加您的努力,这是非常鼓励的,谢谢。
-
不要试图修改 JSON,就好像它只是一堆字符。 JSON 是一种结构化格式,将其视为只是数据行会让您感到悲伤。使用
jq之类的工具来正确操作 JSON。 -
是的,我可以使用
jq看到预期的输出。只是在想我们是否可以在没有额外工具的情况下实现同样的目标。我在问题中粘贴的只是整个文档的一小部分,我认为没有jq就必须有解决方案。在我原来的 json 文档上,这工作得很好:cat images.json | jq '.payload[].location |= "gsub("/";"-")' > images.json_modified -
jq是适合这项工作的工具。你在没有jq的情况下尝试的任何操作都容易出错。