如何提取JSON中sources字段URL的文件名且不修改cloud字段值
JSON字段修改操作方法
你提供的原始JSON存在语法问题,"env": "int"行末尾缺少逗号,先补上这个逗号保证JSON格式合法,否则任何JSON处理工具都无法正常解析。修正后的合法原始JSON结构如下:
{ "cloud": "https://cloudfronturl/folder/folder", "env": "int", "sources": [ "https://www.example.com/some.tar.gz", "https://www.example2.com/folder1/folder2/another.tar.gz" ], "owner": "some manager" }
以下两种常用方法都可以实现需求,处理过程不会改动cloud等其他非sources字段的原有取值:
- 方法一:使用jq命令行工具(适合服务器/终端快速处理)
直接在终端执行如下命令即可,将命令中的文件路径替换为你本地的实际路径:
命令逻辑是遍历jq '.sources |= map(split("/") | last)' input.json > output.jsonsources数组的每一个URL字符串,按/分割后取最后一段(也就是纯文件名)替换原数组内容,其余字段完全保留原值。 - 方法二:使用Python原生脚本(无额外依赖,适合跨平台场景)
新建后缀为.py的脚本文件,粘贴如下代码,替换代码里的输入输出文件路径后运行即可:import json from urllib.parse import urlparse # 读取原始JSON with open("input.json", "r", encoding="utf-8") as f: config = json.load(f) # 仅提取sources中各URL的纯文件名 config["sources"] = [ urlparse(item).path.rsplit("/", maxsplit=1)[-1] for item in config["sources"] ] # 写出结果 with open("output.json", "w", encoding="utf-8") as f: json.dump(config, f, indent=2, ensure_ascii=False)
处理完成后得到的output.json内容和预期结果完全一致,sources数组内容为["some.tar.gz","another.tar.gz"],其余字段和原文件无差别。
内容的提问来源于stack exchange,提问作者J Vipe
相关产品推荐
相关产品推荐

