我从一个API中获得了以下数据:

[{"name":"***.com","id":"***-0a5864441f49","type":"NATIVE"},{"name":"***.de","id":"***-0a5864441f49","type":"NATIVE"},{"name":"***.com","id":"***-0a5864440f67","type":"NATIVE"},{"name":"***.de","id":"***-0a5864441314","type":"NATIVE"},{"name":"***.com","id":"***-0a586444968b","type":"NATIVE"},{"name":"***.de","id":"***-0a5864441314","type":"NATIVE"},{"name":"***.de","id":"***-0a5864441f49","type":"NATIVE"},{"name":"***.de","id":"***-0a5864441f49","type":"NATIVE"},{"name":"***.de","id":"***-0a58644406ac","type":"NATIVE"},{"name":"***.de","id":"***-0a58644435f4","type":"NATIVE"}]

我想用它创建一个菜单,看起来像这样:

Choose one:
1. ***.com ***-0a5864441f49
2. ***.de ***-0a5864441f49
and so on...

然后我想进一步使用输入.在bash中执行此操作最有效的方法是什么?

我在考虑一个数组,但我认为IF不会喜欢我使用},{作为分隔符,对吗?

我试着使用IF,但没有奏效.

推荐答案

您可以使用JQ将输入转换为如下所示(请参见playground):

$ jq -r 'map("\(.name) \(.id)")[]' infile.json
***.com ***-0a5864441f49
***.de ***-0a5864441f49
***.com ***-0a5864440f67
***.de ***-0a5864441314
-->8--

在此基础上,您可以将此输出读入数组,然后使用内置的select显示一个菜单:

readarray -t opts < <(jq -r 'map("\(.name) \(.id)")[]' infile.json)

PS3='Choose one: '
select opt in "${opts[@]}"; do
    echo "Do something with $opt"
    break
done

导致一个提示,

1) ***.com ***-0a5864441f49    6) ***.de ***-0a5864441314
2) ***.de ***-0a5864441f49     7) ***.de ***-0a5864441f49
3) ***.com ***-0a5864440f67    8) ***.de ***-0a5864441f49
4) ***.de ***-0a5864441314     9) ***.de ***-0a58644406ac
5) ***.com ***-0a586444968b   10) ***.de ***-0a58644435f4
Choose one: 

Json相关问答推荐

如何在JMESPath中区分空和假?

如何将加权边列表导出到JSON树?

Vega-Lite(Deneb):难以将最小和最大值应用于折线图和文本标签以及线条末尾的点

需要有关在Ffltter应用程序中解码JSON的帮助;未处理的异常:类型不是类型转换中类型的子类型

GitHub Pages无法正确显示我的项目

基于JQ中另一个对象的值 Select 对象

xidel:是否可以从 JSON 对象中检索特定的嵌套值?

如何从 json 中获取单个元素?

JOLT JSON 将值从一对多转换为一对一

如何在 Flutter 中遍历嵌套的动态 JSON 文件

Flutter:在本地文件 json 中搜索特殊的阿拉伯字符

使用 jq 将键值行转换为 json

从ruby中的json获取特定的键值

杰克逊 2.0 和 Spring 3.1

为什么在我们有 json_encode 时使用 CJSON 编码

如何在不解析的情况下在javascript中同步包含JSON数据?

Django - 异常处理最佳实践和发送自定义错误消息

如何将 LinkedHashMap 转换为自定义 java 对象?

Swift :将 struct 转换为 JSON?

如何将单引号转义成双引号转成单引号