jq解析AccuWeather嵌套JSON无法返回索引数组求助
解决jq返回数组格式的问题
核心问题是你当前的jq查询用了.[].xxx这种写法,会把数组中的每个元素单独输出,而不是包裹成数组。要返回标准数组格式,只需要把提取逻辑放在数组构造器[]里面,或者用map()方法。
示例1:获取RainProbability数组
原问题查询
drp=$(cat "$HOME/directory/file" | jq '.DailyForecasts[].Day.RainProbability | .')
修复后查询
直接用数组构造器包裹提取逻辑:
drp=$(cat "$HOME/directory/file" | jq '[.DailyForecasts[].Day.RainProbability]')
或用map()方法(适合后续需要对元素做额外处理的场景):
drp=$(cat "$HOME/directory/file" | jq '.DailyForecasts | map(.Day.RainProbability)')
修复后返回结果为标准数组格式,例如 [1,2,3,4,5]。
示例2:获取AirAndPollen中Grass的Value数组
原问题查询
apg=$(cat "$HOME/directory/file" | jq '.DailyForecasts[].AirAndPollen | .[1] | .Value | .')
修复后查询
用数组构造器包裹:
apg=$(cat "$HOME/directory/file" | jq '[.DailyForecasts[].AirAndPollen[1].Value]')
或用map():
apg=$(cat "$HOME/directory/file" | jq '.DailyForecasts | map(.AirAndPollen[1].Value)')
关键逻辑说明
.[].xxx是遍历数组并逐个输出元素,因此结果是空格分隔的单个值;[.[].xxx]是将遍历出的所有元素包裹为一个新数组,直接返回完整数组结构;map()是对输入数组的每个元素执行指定操作,最终返回处理后的数组,逻辑更直观,适合复杂的元素处理场景。
内容的提问来源于stack exchange,提问作者user1457613
相关产品推荐
相关产品推荐

