【问题标题】:python combine values for a specific key separated by commapython组合以逗号分隔的特定键的值
【发布时间】:2019-03-06 10:08:10
【问题描述】:

有没有一种方法可以组合以逗号分隔的特定键的多个值。就我而言,我正在尝试打印多个 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"
                }
            ]
        }
    ]
}

【问题讨论】:

  • 您只想将列表中单个字段的所有值导出为逗号分隔列表?
  • 是的,但只有与组对应的键值。假设该组有一个号码、一个 uid 和两个服务。我希望该服务在一行中打印。所以如果存在多个组,脚本可以单独打印它们
  • @peak,可接受的输出已在问题顶部更新。

标签: python json jq


【解决方案1】:

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

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

注意join 需要一个数组,因此names 需要在数组[ ... ] 中。

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

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

【讨论】:

  • 绝对正确@oliv。我刚刚将其更改为以.group[].group[] | { "service": ([.service[].name] | join(","))} 将其放入我的脚本中。这按预期工作。非常感谢。
【解决方案2】:

使用您的第二个 JSON 文本,使用以下过滤器:

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

产生您所期望的输出(包括逗号后的空格):

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

【讨论】:

  • 是的,这就是我所做的。谢谢@peak
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
相关资源
最近更新 更多