如何使用jq(1)从RDAP JSON中获取滥用联系人电子邮件?

How to get the abuse contact email from RDAP JSON using jq(1)?

提问人:mjf 提问时间:11/29/2022 最后编辑:mjf 更新时间:11/29/2022 访问量:69

问:

具有与类似的 RDAP JSON, 如何使用 (es) 获取滥用电子邮件地址(角色设置为“滥用”的条目(如果有))?谢谢。vCardArrayjq(1)

PS:当然,我自己尝试过,但我完全无法从JSON中获得我需要的东西。(我主要习惯于仅用作 JSON 的漂亮打印机。这是我第二次尝试做一些比使用它更复杂的事情,因为我在实践中很少需要解析 JSON。jq(1)jq < ugly.json

JQ RDAP

评论

0赞 0stone0 11/29/2022
请分享您的尝试!
0赞 mjf 11/29/2022
@0stone0 你是说我绝望的试错尝试吗?如果你喜欢看乱七八糟的东西...... 或者,稍后...... 对于这些格式(如 JSON、YAML 等)没有太多工具,对于老式的 unixer 来说非常不直观。我没有时间学习......我必须首先解决一个现实世界的问题。我会选择,我想,这是单镜头动作。但我希望它更可靠一点,仅此而已......rdap -r 8.8.8.8 |jq 'map(select([.roles[]|contains("abuse")]|any)'rdap -r 8.8.8.8 |jq '.events | map(select(vCardArray[].roles == "abuse"))[0] | .roles'jq(1)sed(1)awk(1)
0赞 mjf 11/29/2022
@0stone0我尝试了循序渐进的方法,但实际上除了总是列出整棵树或某种畸形的树之外,并没有取得太大的进展。也许我可以使用一些使用 SQL 查询 JSON 的工具,或者我可以将其扁平化为 CSV 并使用普通的 unix 工具来挖掘信息。?

答:

1赞 0stone0 11/29/2022 #1
.entities[].entities[] | select(.roles | index("abuse")).vcardArray[1][] | select(.[0] == "email") | last

将输出如下:"[email protected]"

  • 我们遍历所有.entities[].entities[]
  • 选择包含带有.rolesabuse
  • 从 vcardArray 中获取字段:.vcardArray[1]
  • 选择第一个索引匹配的索引.[0]email
  • 取该数组的最后一个值

在线试用

评论

0赞 mjf 11/29/2022
工程。并很好地解释了。我学到了一些东西。总有一天我会试一试。现在,非常感谢你。jq(1)