Python 重新格式化现有json文件

Python 重新格式化现有json文件,python,json,Python,Json,我有下一个json文件: { "data": [ { "{#SQP}": "/usr/local/squid/bin/squid", "{#SQP_ID}": "squid1", "{#SQP_ARG}": "-D -C -F -f /etc/squid1.conf", "{#SQP_PT}": "1111", "{#SQP_CONFIG}": "/etc/squid1.conf" }, { "{#SQP}": "/usr/local/squid/bin/squid", "{#SQ

我有下一个json文件:

{ "data":  [    { "{#SQP}": "/usr/local/squid/bin/squid", "{#SQP_ID}": "squid1", "{#SQP_ARG}": "-D -C -F -f /etc/squid1.conf", "{#SQP_PT}": "1111", "{#SQP_CONFIG}": "/etc/squid1.conf" },    { "{#SQP}": "/usr/local/squid/bin/squid", "{#SQP_ID}": "squid2", "{#SQP_ARG}": "-D -C -F -f /etc/squid2.conf", "{#SQP_PT}": "2222 3333", "{#SQP_CONFIG}": "/etc/squid2.conf" },    { "{#SQP}": "/usr/local/squid/bin/squid", "{#SQP_ID}": "squid3", "{#SQP_ARG}": "-D -C -F -f /etc/squid3.conf", "{#SQP_PT}": "4444", "{#SQP_CONFIG}": "/etc/squid3.conf" }  ]}
python脚本正在读取此文件:

#!/usr/bin/env python
import json
import re
import sys
import unittest
import StringIO

def loadSquidPorts(discoveryJson, spJson):
    jsn = json.load(discoveryJson)
    for dt in jsn['data']:
        try:
            id = dt['{#SQP_ID}']
            port = dt['{#SQP_PT}']
            spJson['data'].append({'{ID}': id, '{#PORT}': port})
        except Exception as err:
            pass

def printSquidPortDiscovery(discFilespec, dumpDest=sys.stdout):
    portJson = {'data': []}
    try:
        with open(discFilespec) as discJson:
            loadSquidPorts(discJson, portJson)
    except:
        pass
    json.dump(portJson, dumpDest)

if __name__ == '__main__':
    printSquidPortDiscovery('/root/file.json')
python脚本的输出如下:

{
        "data": [
            {
                "{#ID}": "squid1",
                "{#PORT}": "1111"
            },
            {
                "{#ID}": "squid2",
                "{#PORT}": "2222 3333"
            },
            {
                "{#ID}": "squid3",
                "{#PORT}": "4444"
            }
        ]
    }
我需要在多个端口值的情况下使用此python脚本-分别打印它们,例如:

{
        "data": [
            {
                "{#ID}": "squid1",
                "{#PORT}": "1111"
            },
            {
                "{#ID}": "squid2",
                "{#PORT}": "2222",
                "{#PORT}": "3333"
            },
            {
                "{#ID}": "squid3",
                "{#PORT}": "4444"
            }
        ]
    }
你能帮我一下吗?

请不要用这句话:

spJson['data'].append({'{ID}': id, '{#PORT}': port})
使用:

这将为您提供端口ID作为列表:

{
  "{#ID}": "squid1",
  "{#PORTS}": [
    "555",
    "777"
  ]
}
如果不需要列表,请尝试使用带有编号后缀的键:

port_data = dict()
port_data['{#ID}'] = id
i=0
for single_port in port.split(" "):
 port_data["{#PORT-" + str(i) + "}"] = single_port
 i=i+1
spJson['data'].append(port_data)
这种情况下的输出:

{
  "{#ID}": "squid6",
  "{#PORT-0}": "555",
  "{#PORT-1}": "777"
}

对不起,有个打字错误。已编辑。无法执行此操作,因为您需要具有唯一键。为什么要执行此操作?如果你愿意的话,可以以后再做。但这样做的意义何在?如果没有预处理,您将无法在以后将其转换为json。对于端口
,理想情况下它应该是一个列表作为“{#port}”的值,我需要它在Zabbix中进行低级别发现。如果我使用一个端口列表,那么将只收集其中一个端口的指标。因此,我需要以某种方式分离端口,以便将它们分别添加到项中:2222用于项1等,而不是2222 3333用于一个项。
{
  "{#ID}": "squid6",
  "{#PORT-0}": "555",
  "{#PORT-1}": "777"
}