You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jq将对象中的macAddress值替换为其MD5哈希值?

批量哈希JSON中的MAC地址并替换

初始JSON文档

{  
  "key": "value",  
  "ips": [  
    {  
      "ip": "1.2.3.4",  
      "macAddress": "ac:5f:3e:87:d7:1a"  
    },  
    {  
      "ip": "5.6.7.8",  
      "macAddress": "ac:5f:3e:87:d7:2a"  
    },  
    {  
      "ip": "9.10.11.12",  
      "macAddress": "ac:5f:3e:87:d7:3a"  
    },  
    {  
      "ip": "13.14.15.16",  
      "macAddress": "42:12:20:2e:2b:ca"  
    }  
  ]
}

需求

读取每个macAddress字段的值,通过md5sum计算哈希值,将原MAC地址替换为对应的哈希结果,最终输出修改后的JSON文档。

期望输出

{  
  "key": "value",  
  "ips": [  
    {  
      "ip": "1.2.3.4",  
      "macAddress": "45ee585278a0717c642ff2cb25a8e441"  
    },  
    {  
      "ip": "5.6.7.8",  
      "macAddress": "ab47bf90cb9f385127977569e676ce70"  
    },  
    {  
      "ip": "9.10.11.12",  
      "macAddress": "a5e9785db428e3956a47776dbd00fc91"  
    },  
    {  
      "ip": "13.14.15.16",  
      "macAddress": "f75d61937f70252ff139adee241daab4"  
    }  
  ]
}

现有实现脚本

json_doc="{\"key\": \"value\", \"ips\": [{\"ip\":\"1.2.3.4\",\"macAddress\":\"ac:5f:3e:87:d7:1a\"},{\"ip\":\"5.6.7.8\",\"macAddress\":\"ac:5f:3e:87:d7:2a\"},{\"ip\":\"9.10.11.12\",\"macAddress\":\"ac:5f:3e:87:d7:3a\"},{\"ip\":\"13.14.15.16\",\"macAddress\":\"42:12:20:2e:2b:ca\"}]}"

ip_list=$(jq -c '.ips[]' <<< "$json_doc" |
while read -r jsonline ; do
  hashmac="$(jq -s -j '.[] | .macAddress' <<<"$jsonline" | md5sum | cut -d ' ' -f1)"
  jq --arg hashmac "$hashmac" -s -r '.[] | .macAddress |= "\($hashmac)"' <<<"$jsonline"
done | jq -s)

# Update json document with ip list containing hashed mac addresses
jq --argjson ips "$ip_list" '.ips = $ips' <<<"$json_doc"

更优雅的单行解决方案

利用jq(版本1.6及以上)的run函数直接在JSON处理流程中调用外部md5sum命令,无需拆分再合并数组,一行命令即可完成:

从文件读取JSON的情况

jq '.ips[] |= (.macAddress |= ( . | @sh | run("md5sum", {}; .stdout | split(" ")[0]) ))' input.json

从变量读取JSON的情况

json_doc='{"key": "value", "ips": [{"ip":"1.2.3.4","macAddress":"ac:5f:3e:87:d7:1a"},{"ip":"5.6.7.8","macAddress":"ac:5f:3e:87:d7:2a"},{"ip":"9.10.11.12","macAddress":"ac:5f:3e:87:d7:3a"},{"ip":"13.14.15.16","macAddress":"42:12:20:2e:2b:ca"}]}'
echo "$json_doc" | jq '.ips[] |= (.macAddress |= ( . | @sh | run("md5sum", {}; .stdout | split(" ")[0]) ))'

命令说明

  • .ips[] |=:遍历ips数组中的每个对象,执行后续修改操作
  • .macAddress |=:针对每个对象的macAddress字段进行替换
  • . | @sh:将MAC地址字符串转换为shell安全格式,避免特殊字符干扰
  • run("md5sum", {}; .stdout | split(" ")[0]):调用md5sum命令计算哈希,捕获标准输出后取第一个字段(即纯哈希值)

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:10:55