【问题标题】:jq Handling JSON Array as input to parse the elements of the JSON array within a while loopjq 处理 JSON 数组作为输入以在 while 循环内解析 JSON 数组的元素
【发布时间】:2018-10-19 16:58:53
【问题描述】:

查看了许多关于类似主题的帖子,但我做错了,因为我不断收到“jq:错误:无法打开文件”或“无效的数字文字”。 我试图通过 jq 将 JSON 数组作为字符串值传递给 while 循环,并在循环中读取 JSON 数组的元素。 基本 bash 脚本适用于

尝试从 nodejs 应用程序调用此 bash 脚本。我可以让批处理脚本使用

更改为使用

我的 bash 脚本:

#!/bin/bash

PRESET_ARR=$1
echo "PRESET_ARR=${PRESET_ARR}"
#PRESET_ARR='[{"resolution":"2160*2160","bitrate":60M,"framerate":60},{"resolution":"1350*1350","bitrate":"30M","framerate":60}]'
#./batch.sh '[{"resolution":"2160*2160","bitrate":"60M","framerate":60},{"resolution":"1350*1350","bitrate":"30M","framerate":60}]'
#echo "${PRESET_ARR}" | jq -r '.[] | (.resolution, .bitrate, .framerate)' |

while IFS= read  resolution &&
      IFS= read  bitrate &&
      IFS= read  framerate;
#for row in $(echo "${PRESET_ARR}" | jq -r '.[] | (.resolution, .bitrate, .framerate)');
do

    echo "resolution=$resolution"
    echo "bitrate=$bitrate"
    echo "framerate=$framerate"

done < <(jq -r '.[] | (.resolution, .bitrate, .framerate)' <<< echo "${PRESET_ARR}")
#done < <(jq -r '.[] | (".resolution", ".bitrate", ".framerate")' <<< ${PRESET_ARR})

TIA

【问题讨论】:

    标签: arrays json bash jq


    【解决方案1】:

    也许您的脚本过于复杂而无法有效地调试它。无论如何,以下是从您的脚本中经过调整的摘录,并且运行良好:

    #!/bin/bash
    
    PRESET_ARR='[{"resolution":"2160*2160","bitrate":"60M","framerate":60},{"resolution":"1350*1350","bitrate":"30M","framerate":60}]'
    
    while IFS= read  resolution &&
          IFS= read  bitrate &&
          IFS= read  framerate
    do
    
        echo "resolution=$resolution"
        echo "bitrate=$bitrate"
        echo "framerate=$framerate"
    
    done < <(jq -r '.[] | (.resolution, .bitrate, .framerate)' <<< "${PRESET_ARR}")
    

    也许您遇到的问题可以通过更换来解决 PRESET_ARR=$1PRESET_ARR="$1"

    【讨论】:

    • 谢谢您的回复。批处理脚本对我有用,如您所显示的注释行。从nodejs应用程序调用批处理脚本时它不起作用。cmets在那里显示我根据stackoverflow上的其他解决方案尝试过的各种选项。
    • @peat nodejs 脚本是相同的,但我得到的 presetJsonArr 来自数据库。我得到“jq 错误:无法打开文件 [{分辨率:1560*1560,比特率:30M,帧率:30}]:没有这样的文件或目录\n”。尝试更改 bash 脚本以使用
    • 改变使用 I/P 和 -n : done 处):无法迭代 null (null)\n"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    相关资源
    最近更新 更多