如何用jq在Bash脚本中提取嵌套JSON的Wind/Direction值?
解决jq提取Wind/Direction数值时的「cannot index array with string」错误
问题场景
需要从嵌套数组对象结构的JSON中提取Wind/Direction下的数值,执行以下命令时反复出现「cannot index array with string」错误:
cat accuweather_raw | jq ".Wind[].Direction[] | [.Localized]"
错误原因
这个错误的核心是:你用了数组遍历符号[]去索引一个非数组类型的字段。比如Wind或Direction实际上是单个对象,而非数组,强行加[]就会触发索引错误。
解决方案
根据你的JSON实际结构,选择对应命令:
情况1:Wind和Direction都是单个对象
如果你的JSON结构类似:
{ "Wind": { "Direction": { "Localized": "North", "Degrees": 0 } } }
提取单个值:
cat accuweather_raw | jq ".Wind.Direction.Localized"
提取为数组格式:
cat accuweather_raw | jq "[.Wind.Direction.Localized]"
情况2:Wind是数组,Direction是单个对象
如果JSON结构类似:
[ { "Wind": { "Direction": { "Localized": "North" } }, { "Wind": { "Direction": { "Localized": "East" } } } ]
提取所有值:
cat accuweather_raw | jq ".Wind[].Direction.Localized"
提取为数组格式:
cat accuweather_raw | jq "[.Wind[].Direction.Localized]"
情况3:Wind是单个对象,Direction是数组
如果JSON结构类似:
{ "Wind": { "Direction": [ { "Localized": "North" }, { "Localized": "Northeast" } ] } }
提取所有值:
cat accuweather_raw | jq ".Wind.Direction[].Localized"
提取为数组格式:
cat accuweather_raw | jq "[.Wind.Direction[].Localized]"
容错写法(避免键不存在报错)
如果不确定字段是否存在,可以用?运算符跳过不存在的路径:
cat accuweather_raw | jq ".Wind?.Direction?.Localized"
内容的提问来源于stack exchange,提问作者user1457613
相关产品推荐
相关产品推荐

