将json迭代为bash变量

时间:2015-03-17 18:45:30

标签: json bash

如果我在bash脚本中有一个json字符串,我该如何将其转换为数组?

{ "name": "foo", "id": "123" } { "name": "bar", "id": "456" }

我想要的是提示w /名称,并告诉我需要使用的ID(变量)。

类似

pick your poison:
1) foo
2) bar
#?

如果我选择1,那么id 123将进入变量X,否则如果我选择2,那么id 456将进入变量X

1 个答案:

答案 0 :(得分:5)

更好的方法之一是将相关数据读入关联数组 - 这里使用jq进行解析。

declare -A data=( )
while IFS= read -r id name; do
  data[$id]=$name
done < <(jq -r '@text "\(.id) \(.name)"' <<<"$json_string")

鉴于此,您可以处理您的菜单:

echo "Pick your poison:"
for id in "${!data[@]}"; do
  name=${data[$id]}
  printf '%d) %s\n' "$id" "$name"
done
read -p '#?' selection
echo "User selected ${data[$selection]}"