使用jq提取JSON文件name字段值返回null的问题求助
解决jq提取F5 LTM Virtual name字段返回null的问题
嘿,我明白你为啥用jq '.name' good.json会返回null了——你的JSON是F5 BIG-IP API返回的集合类型响应,顶层根本没有name字段!咱们先拆解下这个结构:
从你给出的JSON片段来看,它的顶层结构是kind、selfLink,真正的虚拟服务器列表是藏在items数组里的,每个数组元素才是包含name字段的单个虚拟服务器对象。
正确提取name字段的jq命令
要拿到所有t1、t2、t3这类name值,你得把路径指向items数组里的每个元素:
# 提取带引号的name值 jq '.items[].name' good.json # 如果要去掉引号(方便后续存数组),加上-r参数 jq -r '.items[].name' good.json
如果怕items数组为空导致jq报错,可以加个可选链操作符(?)做容错处理:
jq -r '.items[]?.name' good.json
将提取结果存入bash数组
要把这些name值存入bash数组变量,直接用命令替换就行,记得用-r参数避免引号干扰:
# 定义数组 virtual_names=($(jq -r '.items[].name' good.json)) # 验证数组内容 echo "提取到的虚拟服务器名称:${virtual_names[@]}"
这样你后续做POST请求的时候,就能直接遍历这个数组啦~
内容的提问来源于stack exchange,提问作者Sanjay Shitole
相关产品推荐
相关产品推荐

