arrays - jq - 为数组上的值添加前缀

标签 arrays json export-to-csv jq

输入json:

[
{
  "login": "u1",
  "name": "u1",
  "role": "User",
  "groups": [
    {
      "id": "1234",
      "name": "G1"
    },
    {
      "id": "1235",
      "name": "G2"
    }
  ],
  "created": "2020-05-11 11:06"
},
{
  "login": "u2",
  "name": "u2",
  "role": "User",
  "groups": null,
  "created": "2020-05-11 11:06"
}
]

我使用以下过滤器来获取他们所属的用户和组:

$ jq -r '
  .[]
  | [.login,
     .name,
     ( if .groups == null 
       then "grp:-" 
       else (del(.groups[]
             | select(.name=="All Users"))
            | [.groups[].name] | join("|")) 
       end )]
  | @tsv' json
u1      u1      G1|G2
u2      u2      grp:-

如何为每个找到的组添加 grp: 前缀?

预期输出为:

u1      u1      grp:G1|grp:G2
u2      u2      grp:-

最佳答案

使用+连接字符串:

jq -r '.[]
       | [.login,.name,(
           if .groups == null
           then "grp:-"
           else (
               del(.groups[] | select(.name=="All Users"))
               | ["grp:" + .groups[].name]
#                 ~~~~~~~~
               | join("|")
           )
           end
      )]
      | @tsv' 

您甚至可以避免指定“grp:”两次,但您也需要从 then 分支返回一个数组:

jq -r '.[]
       | [.login, .name, (
           (
               if .groups == null
               then ["-"]
               else (
                   del(.groups[] | select(.name=="All Users"))
                   | [.groups[].name]
               )
               end
           )
           | map("grp:" + .)
           | join("|")
       )]
       | @tsv'

更新: 从峰值中获取灵感我想这会产生您想要的输出:

jq -r '.[]
        | .groups //= []
        | del(.groups[] | select(.name=="All Users"))
        | .groups[0] //= {name: "-"}
        | [.login, .name, ( ["grp:" + (.groups[].name)] | join("|") ) ]
        | @tsv'

关于arrays - jq - 为数组上的值添加前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65833864/

相关文章:

python - 在 Django 1.6 中将多个模型序列化为 json 的最佳方法是什么?

python - 解析csv文件并根据相对大小将行写入文件

python - 如何将已删除的 python pandas 列保存为 csv?

Excel 废墟 CSV

python - 如何显示不带引号且以逗号作为分隔符的 NumPy 字符串数组?

javascript - 使用 OR 操作数进行数组推送

java 不会让我将这些数组增加 2。不断收到错误,指出它们不是语句

javascript - 如何获取从过去日期到现在的月份和年份 JavaScript

java - POST 请求无法使用 ReSTLet 处理 JSON 输入

php - 为什么需要在 php 和 AJAX 中使用 JSON