arrays - 将 JSON 数组读入 Bash 数组
问题描述
我有以下 json 文件:
{
"data": {
"allPost": {
"edges": [
{
"node": {
"slug": "fp-cheat-sheet",
"labels": [
"FUNCTIONAL PROGRAMMING",
"HASKELL",
"SCALA"
]
}
},
{
"node": {
"slug": "nlp-101",
"labels": [
"DATA SCIENCE",
"NLP",
"PYTHON"
]
}
}
]
}
}
}
我正在编写一个 shell 脚本来提取每个的信息edge
,使用 JQ。从 each edge
(这是一个数组)中,我能够提取slugs
哪个是字符串,但不能提取哪个labels
又是一个数组:
readarray -t slugs < <(cat ${json_file_name} | jq .data.allPost.edges[].node.slug)
readarray -t tags < <(cat ${json_file_name} | jq .data.allPost.edges[].node.labels)
echo ${slugs[1]}
# successfully prints '"nlp-101"'
echo ${tags[1]}
# wrongly prints '"FUNCTIONAL PROGRAMMING",'
我想为每个帖子提取标签并以完全相同的格式将其打印在文件中。例如,echo ${tags[1]}
我希望它打印:
["DATA SCIENCE", "NLP", "PYTHON"]
如何修复上述代码以根据需要从上述 JSON 中提取标签?
解决方案
使用-c标志调用 JQ,以便在一行中打印每个数组。
$ readarray -t tags < <(jq -c '.data.allPost.edges[].node.labels' file)
$ echo "${tags[1]}"
["DATA SCIENCE","NLP","PYTHON"]
推荐阅读
- r - 贝叶斯 Beta 回归模型 - jags 中的错误:无效的父值
- r - 如何改进我的代码以将因子列转换为 data.frame 中的列表?
- python-3.x - 在 pandas 中获取非结构化 df 列表并在两列中给出数据结构
- python - 如何使按钮必须是可点击的以更改值并在 PyQt 中继续?
- rest - Jenkins CORS 过滤器插件未添加 Access-Control-Allow-Origins 标头
- jasmine - 茉莉业力句柄GlobalErrors
- datetime - Neo4j 在不使用 apoc 插件的情况下将时间戳()纪元格式化为日期时间
- azure - 将 Azure DevOps 连接到 Azure AD 的电子邮件要求
- javascript - 在按钮单击时调用功能组件
- javascript - 将 Google 跟踪代码管理器与 gatsby-plugin-guess-js 集成