如何遍历指定数组,从JSON对象中提取对应title与score值
解决方案
要实现你的两个需求,推荐使用jq工具来解析JSON数据(这是Shell环境下处理JSON的标准工具,大部分Linux发行版和macOS都可以通过包管理器安装)。以下是具体实现:
1. 输出所有title和score的值
通过jq一次性遍历JSON对象的所有属性,提取并格式化每个条目的标题和分数:
json_input='{ "performance": { "title": "Performance", "score": 0.95 }, "accessibility": { "title": "Accessibility", "score": 1 }, "bestPractices": { "title": "Best Practices", "score": 0.92 }, "seo": { "title": "SEO", "score": 0.83 }, "progressiveWebApp": { "title": "PWA", "score": 0.33 } }' # 输出所有指标的title和score echo "所有指标的title和score:" jq '.[] | "\(.title): \(.score)"' <<< "$json_input"
代码说明:.[]遍历JSON对象的所有子属性值,"\(.title): \(.score)"将标题和分数拼接成字符串输出。
2. 遍历metrics数组提取对应score
修改循环逻辑,通过jq的参数传递功能,精准定位每个metric对应的分数:
metrics=("accessibility" "bestPractices" "performance" "progressiveWebApp" "seo") echo -e "\n按metrics数组提取对应score:" for metric in "${metrics[@]}"; do score=$(jq --arg metric "$metric" '.[$metric].score' <<< "$json_input") echo "${metric}: ${score}" done
代码说明:--arg metric "$metric"将Shell变量传递给jq,.[$metric].score根据变量值定位到对应指标的分数,最后赋值给Shell变量并输出。
完整整合脚本
json_input='{ "performance": { "title": "Performance", "score": 0.95 }, "accessibility": { "title": "Accessibility", "score": 1 }, "bestPractices": { "title": "Best Practices", "score": 0.92 }, "seo": { "title": "SEO", "score": 0.83 }, "progressiveWebApp": { "title": "PWA", "score": 0.33 } }' metrics=("accessibility" "bestPractices" "performance" "progressiveWebApp" "seo") # 输出所有title和score echo "所有指标的title和score:" jq '.[] | "\(.title): \(.score)"' <<< "$json_input" # 遍历metrics数组提取对应score echo -e "\n按metrics数组提取对应score:" for metric in "${metrics[@]}"; do score=$(jq --arg metric "$metric" '.[$metric].score' <<< "$json_input") echo "${metric}: ${score}" done
运行输出示例
所有指标的title和score: "Performance: 0.95" "Accessibility: 1" "Best Practices: 0.92" "SEO: 0.83" "PWA: 0.33" 按metrics数组提取对应score: accessibility: 1 bestPractices: 0.92 performance: 0.95 progressiveWebApp: 0.33 seo: 0.83
内容的提问来源于stack exchange,提问作者basant
相关产品推荐
相关产品推荐

