是否可以将recursive-descent结果收集到jq
的单个数组中?
flatten
会有帮助吗?看起来对我来说,但我无法让它工作。看看我现在在https://jqplay.org/s/6bxD-Wq0QE的距离,任何人都可以使它工作?
顺便说一句,
.data.search.edges[].node | {name, topics: ..|.topics?}
有效,但我希望来自同一节点的所有主题都在一个数组中,而不是在所有不同的返回结果中具有相同的name
。 flatten
会给我Cannot iterate over null
和map(select(.? != null))
来过滤null
的原因。但是,我的Cannot iterate over null
也获得map-select
。 现在一切都归结为如何过滤掉那些null
s?
更新:,"收集到一个数组" 我的意思是这样:
[
{
"name": "leumi-leumicard-bank-data-scraper",
"topics": ["banking", "leumi", "api", "puppeteer", "scraper", "open-api"]
}
]
而不是在所有不同的返回结果中重复相同的name
。因此,递归下降似乎是我的选择,但只要我能得到如上所述的结果,我就可以接受任何解决方案。那可能吗?谢谢。
答案 0 :(得分:2)
不确定您期望得到什么结果......但似乎您正试图将所有存储库及其主题放在一个平面阵列中。我没有看到你在这里使用递归的任何理由,你只是从一类对象中选择。只需直接引用它们。
[.data.search.edges[].node | {name,topic:(.repositoryTopics.nodes[].topic.topics)}]
对于您的特定输入产生:
[
{
"name": "leumi-leumicard-bank-data-scraper",
"topic": "banking"
},
{
"name": "leumi-leumicard-bank-data-scraper",
"topic": "leumi"
},
{
"name": "leumi-leumicard-bank-data-scraper",
"topic": "api"
},
{
"name": "leumi-leumicard-bank-data-scraper",
"topic": "puppeteer"
},
{
"name": "leumi-leumicard-bank-data-scraper",
"topic": "scraper"
},
{
"name": "leumi-leumicard-bank-data-scraper",
"topic": "open-api"
}
]
https://jqplay.org/s/G2inYAJNLS
如果您希望在节点中拥有一系列主题,只需将选择主题的过滤器放在[]
中,就可以将它们收集到一个数组中。
[.data.search.edges[].node | {name,topic:[.repositoryTopics.nodes[].topic.topics]}]
[
{
"name": "leumi-leumicard-bank-data-scraper",
"topic": [
"banking",
"leumi",
"api",
"puppeteer",
"scraper",
"open-api"
]
},
{
"name": "echarts-scrappeteer",
"topic": []
}
]
答案 1 :(得分:1)
收集非假名值的一种方法:
.data.search.edges[].node
| {name, topics: [.. | .topics? | select(.)]}
结果将是:
{
"name": "leumi-leumicard-bank-data-scraper",
"topics": [
"banking",
"leumi",
"api",
"puppeteer",
"scraper",
"open-api"
]
}
{
"name": "echarts-scrappeteer",
"topics": []
}