如何从JSON文件提取id与username并生成逗号分隔列文件
提取JSON中id与username字段的单命令实现方案
问题背景
你手头有一份包含多条JSON对象的文件(示例结构如下),需要提取每条对象里的id和username字段,生成username,id格式的内容写入新文件:
{ "href": "/users/115", "id": 115, "username": "test", "locked": false, "type": "local", "effective_groups": [] }
之前尝试用sed搭配grep只能提取单个字段,想要一个能一步到位的单命令解决方案。
最佳解决方案:使用jq工具
jq是专门处理JSON数据的命令行工具,比sed/grep更可靠,能完美适配JSON的各种格式变化(比如字段顺序调整、空格增减),是处理JSON场景的首选工具。
命令示例
jq -r '"(.username),(.id)"' user_id_json.txt > output.txt
命令细节解释
-r:参数表示输出原始字符串(去掉JSON默认的字符串引号,符合你要的纯文本格式)"(.username),(.id)":jq的格式化表达式,把提取到的username和id字段按用户名,ID的格式拼接输出user_id_json.txt:替换成你的输入JSON文件路径> output.txt:将最终结果写入指定的新文件
如果你的JSON是数组格式(比如[{...}, {...}, {...}]),可以用下面的命令遍历所有对象:
jq -r '.[] | "(.username),(.id)"' user_id_json.txt > output.txt
备用方案:sed+正则组合(适合无jq的环境)
如果服务器上没法安装jq,可以用文本处理工具组合实现,但注意这种方式依赖JSON的固定格式(比如字段顺序、引号和空格的排版),通用性稍弱:
sed -E 's/.*"username": "([^"]+)".*"id": ([0-9]+).*/\1,\2/' user_id_json.txt > output.txt
这个命令通过正则匹配,精准提取username的字符串内容和id的数字内容,再替换成用户名,ID的格式输出。
内容的提问来源于stack exchange,提问作者KingOfChennai
相关产品推荐
相关产品推荐

