You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Bash中截取JSON命令输出为指定格式?

解决方法:用jq精准提取JSON字段

你遇到的问题核心是用文本工具(比如cut)处理结构化的JSON数据容易出错,jq才是处理JSON的正确工具——它能直接解析JSON结构,精准定位到你需要的字段。

具体命令

假设你的JSON输出内容已经保存到data.json文件中,或者通过管道从命令输出传入,执行以下命令就能得到你想要的格式:

# 从文件读取JSON
jq -r '.graphql.user | "full name : \(.full_name)、edge_followed_by : \(.edge_follow.count)、followed_by_viewer : \(.edge_followed_by.count)、is_business_account : \(.is_business_account)、business_email : \(.business_email)、is_verified : \(.is_verified)"' data.json

# 或者从命令管道传入
your_source_command | jq -r '.graphql.user | "full name : \(.full_name)、edge_followed_by : \(.edge_follow.count)、followed_by_viewer : \(.edge_followed_by.count)、is_business_account : \(.is_business_account)、business_email : \(.business_email)、is_verified : \(.is_verified)"'

命令解释

  1. -r参数:让jq输出原始字符串(不带JSON默认的引号),符合你要的格式要求。
  2. .graphql.user:定位到JSON结构中的用户对象层级,这是你要提取的所有字段的父节点。
  3. 字符串插值:用\(字段路径)的方式把对应字段的值插入到你指定的格式字符串中,比如\(.full_name)会替换成用户的全名Ellen

补充说明

你提供的目标输出里,followed_by_viewer : 11其实对应JSON里的edge_followed_by.count(粉丝总数),而原JSON的followed_by_viewer是布尔值false(表示当前查看者是否关注该用户);edge_followed_by : 1对应edge_follow.count(该用户关注的人数)。我在命令里已经按你想要的输出做了对应,如果你需要调整字段对应关系,只需要修改\(...)里的路径即可。

另外,确保你的JSON内容是完整有效的——你提供的内容末尾有截断(比如width":6...}),如果实际输出是不完整的JSON,jq会解析失败,需要先补全缺失的括号和引号。

内容的提问来源于stack exchange,提问作者مريم الحربي

火山引擎 最新活动