Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在jq数组中获取值if对象或字符串如果字符串

在jq数组中获取值if对象或字符串如果字符串
EN

Stack Overflow用户
提问于 2022-06-29 04:56:53
回答 4查看 659关注 0票数 2

我有一个JSON对象,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[{"name":"NAME_1"},"NAME_2"]

我想要…的输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
["NAME_1", "NAME_2"]

数组中的一些条目是一个具有键" name“的对象,还有一些只是名称的字符串。我正在试图提取一个数组的名字。使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jq -cr '.[].name // []'

在尝试索引字符串对象的.name时抛出一个错误。是否有一种方法来检查它是否是字符串,如果是的话,只使用它的值而不是.name?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-06-29 05:10:26

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo '[{"name":"NAME_1"},"NAME_2"]' \
| jq '[ .[] | if (.|type) == "object" then .name else . end ]'
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
  "NAME_1"
  "NAME_2"
]

参考:

@LéaGris的评论,一个更简单的版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jq '[ .[] | .name? // . ]' file
票数 3
EN

Stack Overflow用户

发布于 2022-06-29 05:09:23

您可以使用type函数来返回对象的"object"

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jq '.[] | if type == "object" then .name else . end' file.json

要以数组的形式获得输出,只需将整个表达式包装到[ ... ]中即可。

票数 3
EN

Stack Overflow用户

发布于 2022-06-29 05:11:13

只需使用错误抑制操作符?mapscalars

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jq 'map( .name?, scalars )'

注意,通过使用scalars,假定除了带有name的对象之外,其他所有对象都是表单NAME_*的名称。如果还存在其他字符串,并且需要排除其中的一些字符串,则可能需要添加一些额外的逻辑才能做到这一点。例如,在您选择的字符串中使用startswith(..)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
map( .name?, select( scalars | startswith("NAME") ) )

演示

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

https://stackoverflow.com/questions/72801812

复制
相关文章
win和linux的php异或运算结果不同
作者:matrix 被围观: 3,383 次 发布时间:2015-06-17 分类:兼容并蓄 零零星星 | 3 条评论 »
HHTjim 部落格
2022/09/26
2.6K0
win和linux的php异或运算结果不同
bat批处理命令根据不同的操作系统设置不同的电源使用方案
公司最近发现电费高了,经查看原来是有部分同事下班电脑不关……那么问题来了,我们如何通过技术手段来避免这个问题呢?直接下发策略远程关机是可以的,但怕有误伤;准备推送策略让电脑休眠,毕竟能省一点是一点吗,接着发现这得每天推送一次脚本,并且遇到加班的同事策略就显得呆板了,无法在错过执行时间后继续运行;又考虑了下,想办法更改终端的电源方案,控制显示器关机和睡眠时间,这样只要符合策略系统自己就执行了;继续完善,xp和win7系统更改电源方案命令还不一样;最后决定通过360天擎平台推送批处理脚本,然后脚本根据操作系统执行对应的命令,这样终端电源方案被改了,只要满足对应策略,终端就会自动关闭显示器,进入休眠或者睡眠模式。
吾爱运维
2022/10/05
2.3K0
bat批处理命令根据不同的操作系统设置不同的电源使用方案
批处理for命令的用法_cmd批处理命令
语法 for {%variable|%%variable} in (set) do command [ CommandLineOptions]
全栈程序员站长
2022/11/07
2.3K0
批处理for命令的用法_批处理for命令详解
for %variable in (set) do command [command-parameters]
全栈程序员站长
2022/10/02
2.6K0
相同的时间,不同的人生
在规定的时间内,一个人目标的达成情况(创造的价值),我们称之为效率。如此可见效率与时间是密切相关的,提高效率首先要做的就是提高我们的时间利用率。
keinYe
2020/05/25
1.2K0
select * 与 select id 字段 条件相同 数据结果不同(二)
都是全表扫描 都是使用where 都是文件排序(如果待排序的内容不能由所使用的索引直接完成排序的话)
MickyInvQ
2020/09/27
1.3K0
select *  与 select id  字段 条件相同 数据结果不同(二)
select * 与 select id 字段 条件相同 数据结果不同(一)
起初以为是timezone时区设置问题,结果,配置改为CST后,仍然问题没解决,后看了下,这个date是dateTime类型的,与时区无关,所以问题不在此。
MickyInvQ
2020/09/27
1.2K0
select *  与 select id  字段 条件相同 数据结果不同(一)
python获取命令行输出结果
python获取命令行输出结果,并对结果进行过滤找到自己需要的! 这里以获取本机MAC地址和IP地址为例! # coding: GB2312 import os, re # execute command, and return the output def execCmd(cmd): r = os.popen(cmd) text = r.read() r.close() return text # write "data" to file
py3study
2020/01/10
4.5K0
简单的批处理命令_bat批处理执行cmd命令
转载来源:https://blog.csdn.net/Joker_N/article/details/89838719
全栈程序员站长
2022/09/23
2K0
命令行查看不同系统的网卡信息
很多时候一条简单的命令就可以得到你所想要的信息,记住他们吧! windows:wmic nic list brief linux:lspci|grep Ethernet exsi:esxcfg-nic
孙杰
2019/10/29
7510
命令行查看不同系统的网卡信息
consul注册相同服务,相同程序,相同IP,不同端口来负载的问题
由于今天发现运维代码未正常发布。想要自己手动发布。发现原有服务名mos-x3-gls-service只有1个node启动,为了保障发布时原有服务不中断我需要再注册1个node,于是我简单修改了原有springboot端口9112为9113,启动后发现9113的节点正常注册,但是原来9112端口的节点服务没有了,搞了个寂寞。原因是如果在Spring Cloud Consul中使用相同的节点id进行注册,那么Consul将会将它们视为同一个节点,并将它们注册为同一个节点。老了,大意了。于是我把注册consul的节点id设置为服务名称+进程id即可解决。
高久峰
2023/06/17
5190
Simulator 和 Emulator 的相同和不同;
在看模拟器的时候,出现了关于Simulator和Emulator两种词汇;都可以翻译为模拟器;但在调研游戏模拟器的时候,多为Emulator; 两者词汇的含义和应用场景有什么异同呢?
西湖醋鱼
2021/02/23
2K0
linux 或 mac 命令行更优雅的使用 curl 命令,以及命令行常用的快捷键说明
最近看了一下我的博客的访问统计,作为一个前端博主,没有想到我阅读量最高的一篇博文居然是介绍如何在命令行使用 curl 命令的文章《curl 模拟 GET\POST 请求,以及 curl post 上传文件》。
FungLeo
2020/04/30
6.6K0
linux 或 mac 命令行更优雅的使用 curl 命令,以及命令行常用的快捷键说明
批处理for命令的用法_批处理主要解决
for是批处理中最复杂,也最强大的关键字。熟练掌握for的用法,才可能理解批处理的强大之处。
全栈程序员站长
2022/09/27
1.9K0
Windows命令窗口输入命令报错不是内部或外部命令,也不是可运行的程序 或批处理文件
在系统环境变量的Path路径中添加C:\Windows\system32; 如果Path有变量值,则这样加(;C:\Windows\system32;)
互联网-小阿宇
2022/11/21
1K0
Windows命令窗口输入命令报错不是内部或外部命令,也不是可运行的程序 或批处理文件
Shell 命令行求两个文件每行对比的相同内容
本文介绍了如何通过shell命令行进行两个文件之间的对比,包括使用cat命令、while循环、for循环以及grep命令等方法。通过这些方法,可以方便地求出两个文件中每行对比的相同内容,并输出结果。
FungLeo
2018/01/08
2.9K0
Windows命令窗口输入命令报错不是内部或外部命令,也不是可运行的程序 或批处理文件
在系统环境变量的Path路径中添加C:\Windows\system32; 如果Path有变量值,则这样加(;C:\Windows\system32;)
全栈程序员站长
2021/06/10
1.6K0
Windows命令窗口输入命令报错不是内部或外部命令,也不是可运行的程序 或批处理文件
获取时间的批处理命令
@echo off set panpath=C:\pdi-ce-5.4.0.1-130\data-integration set kpath=D:\03works\ZYWSPT\kettle
用户5640963
2019/07/26
9710
'mysql' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
1、C:\Users\Aiyufei>mysql -h 127.0.0.1 -u root 'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件。
别先生
2018/10/25
6.9K0
'mysql' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
‘vue’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
获取下载的包路径信息 npm config get prefix 将路径设置到系统环境变量
kirin
2020/06/18
6.5K0

相似问题

在单个事务中运行spring @ transaction注释方法

10

Spring JPA事务在@ transaction注释方法结束之前提交

31

Spring @ Transaction阻止打开事务

10

Spring为每个方法调用获得新事务,而事务不能正常工作。

10

通过反射调用@ transaction方法时未创建的Spring事务

16
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文