json - 如何使用 jq 提取 json 值子字符串
问题描述
我有这个json:
{"temperature":"21", "humidity":"12.3", "message":"Today ID 342 is running"}
我想使用 jq 来获取这个 json:
{"temp":"21", "hum":"12.3", "id":"342"}
如您所见,我要做的是提取 ID 号 342 并将其放入具有不同键名的新 json 中。我想我应该使用正则表达式,但我不知道如何在 jq 语法中插入它。
我可以使用基本命令创建另一个 json:
cat old.json | jq '{temp:.temperature,hum:.humidity, id:.message}' > new.json
我知道我可以使用方括号选择子字符串,但我不想使用它们,因为它们没有考虑具有不同长度和结构的字符串。我想使用正则表达式,因为我知道 ID 号总是在“ID”部分之后。
解决方案
你是对的,正则表达式是去这里的方式。幸运的是,jq
手册中有很大一部分是关于使用它们的。
jq '
{
temp: .temperature,
hum: .humidity,
id: (.message | capture("ID (?<id>[[:digit:]]+)").id)
}' <old.json >new.json
您可以在https://jqplay.org/s/k-ZylbOC6W上看到使用您的示例数据运行
推荐阅读
- node.js - Nodejs流链接
- javascript - 编写测试用例时,在 afterAll() 函数中不执行 SQL 查询
- java - 在 JPanel 上将 JLabel 向左或向右对齐
- mysql - 不是有效的 BCrypt 哈希。发生错误
- mysql - SQL 脚本无法创建某些表
- c# - 使用跨度
作为子字符串的替代品 - io - 将列表写入 lisp 中的文件
- c# - 如何仅在 C# 中获取 RSACryptoServiceProvider 公钥和私钥
- asynchronous - 如何在颤振应用程序中显示 5 分钟不可停止的计时器?
- switch-statement - 我的处理程序工作不顺畅。我该如何解决?