首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >每个jq输出的编号

每个jq输出的编号
EN

Unix & Linux用户
提问于 2023-02-10 02:05:33
回答 1查看 102关注 0票数 -1

我有一个JSON文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "fieldA": {"fieldData": "XYZ"}
    "fieldB": {"fieldData": "PQR"}
    "fieldC": {"fieldData": null}
    "fieldD": {"fieldData": "DEF"}

我用了jq

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jq -r 'to_entries[] | if .value.fieldData != null then .key, .value.fieldData else empty end'

打印这样的数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fieldA
XYZ
fieldB
PQR
fieldD
DEF

现在我也想用这个获得索引,但是忽略了null值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1
fieldA
XYZ
2
fieldB
PQR
# see the 3rd field is ignored completely and 3 is given for the 4th field.
3
fieldD
DEF
EN

回答 1

Unix & Linux用户

发布于 2023-02-10 02:22:12

假设输入的JSON文档是有效的,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
   "fieldA": { "fieldData": "XYZ" },
   "fieldB": { "fieldData": "PQR" },
   "fieldC": { "fieldData": null },
   "fieldD": { "fieldData": "DEF" }
}

然后,您可以通过删除具有fieldData值(即null)的部分来启动您的D3表达式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jq 'map_values(select(.fieldData != null))' file

为了访问结果对象中每个键的索引,我们可以使用to_entries两次,并与我们感兴趣的其他数据一起提取它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ jq -r 'map_values(select(.fieldData != null)) | to_entries | to_entries | map(.key+1, .value.key, .value.value.fieldData)[]' file
1
fieldA
XYZ
2
fieldB
PQR
3
fieldD
DEF

我们使用to_entries两次访问原始对象中的键索引。

注意,JSON对象中的键顺序不一定是固定的。如果您需要在JSON结构中对事物进行固定的排序,则使用数组代替。也许就像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
    { "name": "fieldA", "fieldData": "XYZ" },
    { "name": "fieldB", "fieldData": "PQR" },
    { "name": "fieldC", "fieldData": null },
    { "name": "fieldD", "fieldData": "DEF" }
]

使用您以前相关问题(使用检查从数组中获取json的键和值)的原始数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jq -r 'map(select(.name != "null")) | to_entries | map(.key+1, .value.name, .value.type)[]'  file

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jq -r 'map(select(.name != "null") | [.name, .type]) | to_entries | map(.key+1, .value[])[]'  file

这与我对你另一个问题的回答有点接近。

请注意,与上面的内容相比,缺少对to_entries的初始调用,因为我们现在没有键中的数据,因此没有对键本身的调查。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/735030

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文