我有下一个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"
}
]
}
你可以帮帮我吗?
答案 0 :(得分:2)
而不是这一行:
spJson['data'].append({'{ID}': id, '{#PORT}': port})
使用:
port_data = dict()
port_data['{#ID}'] = id
port_data['{#PORTS}'] = port.split(" ")
spJson['data'].append(port_data)
这将为您提供端口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"
}