我得到一个二维数组,但不能在外壳中使用它

时间:2019-07-16 08:51:55

标签: shell jq

VALUES=$(cat $JSON_FILE | jq '.["resources"] | map([.name,.type,.url])|.array')

我要设置此VALUES的范围。但它可能像一个字符串而不是二维数组。

echo VALUES is [ [ "br_wind_rain_tex_png", "image", "assets/language/zh-cn/bloodriver/gamescene/effect/xiayu/br_wind_rain_tex.png" ], [ "baccarat_goodWayListItemBg_png", "image", "assets/language/zh-cn/baccarat/game/baccarat_goodWayListItemBg.png" ] ]

#!/bin/bash
BASE_PATH="/Users/likun/source/data/ky_qipai/client/egret"
JSON_FILE=$BASE_PATH/resource/default_zh_cn.res.json
KEYS=$(cat $JSON_FILE | jq '.["groups"]|map(select(.name=="logo"))|.[0]|.keys|split(",")')
#echo $KEYS
VALUES=$(cat $JSON_FILE | jq '.["resources"] | map([.name,.type,.url])|.array')
echo $VALUES
for v in $VALUES
do
echo $v
for vv in $v
do
    if [[ "$vv" == "image" ]]
    then
        echo $vv
    fi
done
break
done

1 个答案:

答案 0 :(得分:0)

如果在脚本中似乎是这种情况,如果您想使用脚本的for循环遍历所有标量值,则可以使用以下模型:

#!/bin/bash

JSON='[ [ "br_wind_rain_tex_png", "image", "assets/language/zh-cn/bloodriver/gamescene/effect/xiayu/br_wind_rain_tex.png" ],
        [ "baccarat_goodWayListItemBg_png", "image", "assets/language/zh-cn/baccarat/game/baccarat_goodWayListItemBg.png" ] ]'

jq '.. | scalars' <<< "$JSON" | while read -r value
do
    echo "$value"
done

由于您尚未指出要实现的目标,因此,我指出,您可以完全避免shell循环,即使用jq对标量值执行所需的任何计算。