首页 > 解决方案 > python组合以逗号分隔的特定键的值

问题描述

有没有一种方法可以组合以逗号分隔的特定键的多个值。在我的情况下,我正在尝试打印多个service.names值,以便它们可以打印在以逗号分隔的单行中。

如何组合service.name以逗号分隔的值,以便它们打印如下:

{
  "number": 1,
  "service name": "FTP-Server, SSH-Server"
}

我在 pyjq 中尝试过,但它通过一个完整的单独块分隔值。

.group[].group[] | { "number": .number, "service name": .service[].name }

这是我得到的输出

{
  "number": 1,
  "service name": "FTP-Server"
}
{
  "number": 1,
  "service name": "SSH-Server"
}

下面给出了带有/不带有对象字典的相同数据。我可以接受任何格式。

启用了对象字典的 JSON 文件

{
    "objects-dictionary": [
        {
            "name": "FTP-Server", 
            "port": "21", 
            "type": "service-tcp", 
            "uid": "ef245528-9a3d-11d6-9eaa-3e5a6fdd6a6a"
        }, 
        {
            "name": "SSH-Server", 
            "port": "22", 
            "type": "service-tcp", 
            "uid": "dff4f7ba-9a3d-11d6-91c1-3e5a6fdd5151"
        }
    ], 
    "base": [
        {
           "number": 1, 
            "service": [
                "ef245528-9a3d-11d6-9eaa-3e5a6fdd6a6a",
                "dff4f7ba-9a3d-11d6-91c1-3e5a6fdd5151"
            ],
            "uid": "90088436-ac42-4363-84a6-3dbebf3c11f0"
        }
    ]
}

没有对象字典的 JSON 文件

{
    "group": [
        {
            "group": [
                { 
                    "number": 1, 
                    "service": [
                        {
                            "name": "FTP-Server", 
                            "port": "21", 
                            "type": "service-tcp", 
                            "uid": "ef245528-9a3d-11d6-9eaa-3e5a6fdd6a6a"
                        }, 
                        {
                            "name": "SSH-Server", 
                            "port": "22", 
                            "type": "service-tcp", 
                            "uid": "dff4f7ba-9a3d-11d6-91c1-3e5a6fdd5151"
                        }
                    ], 
                    "uid": "90088436-ac42-4363-84a6-3dbebf3c11f0"
                }
            ]
        }
    ]
}

标签: pythonjsonjq

解决方案


目前还不清楚您期望的输出是什么,但是鉴于您的最后一个示例并使用jq您可以将两个服务名称连接在一起:

<file jq '[.group[].group[].service[].name] | join(",")'

请注意,它join需要一个数组,因此names 需要在一个数组内[ ... ]

如果您需要在对象本身中添加此字符串,您可以执行以下操作:

<file jq '.service.name=([.group[].group[].service[].name] | join(","))'

推荐阅读