我有此JSON文件:打印所有端口值
{ "data": [ { "{#PROC}": "/usr/local/test", "{#PROC_IDENT}": "test1", "{#PROC_ARGS}": "-l -c -g -k /etc/test1.conf", "{#PROC_PORT_1111}": "1111", "{#PROC_CONF}": "/etc/test1.conf" }, { "{#PROC}": "/usr/local/test", "{#PROC_IDENT}": "test2", "{#PROC_ARGS}": "-l -c -g -k /etc/test2.conf", "{#PROC_PORT_2222}": "2222", "{#PROC_PORT_3333}": "3333", "{#PROC_CONF}": "/etc/test2.conf" }, { "{#PROC}": "/usr/local/test", "{#PROC_IDENT}": "test3", "{#PROC_ARGS}": "-l -c -g -k /etc/test3.conf", "{#PROC_PORT_4444}": "4444", "{#PROC_CONF}": "/etc/test3.conf" } ]}
這個文件是由這個python腳本閱讀:
import json
import re
import sys
import unittest
import StringIO
def TestPorts(discoveryJson, spJson):
jsn = json.load(discoveryJson)
for dt in jsn['data']:
try:
id = dt['{#PROC_IDENT}']
port = dt['{#PROC_PORT_1111}']
spJson['data'].append({'{ID}': id, '{#PORT_1111}': port})
except Exception as err:
pass
def printTestPort(discFilespec, dumpDest=sys.stdout):
portJson = {'data': []}
try:
with open(discFilespec) as discJson:
TestPorts(discJson, portJson)
except:
pass
json.dump(portJson, dumpDest)
if __name__ == '__main__':
printTestPort('/tmp/file.json')
此刻,我只能打印只有一個端口值和id輸出值:
{
"data": [
{
"{#ID}": "test1",
"{#PORT_1111}": "1111"
}
]
}
如何獲得下一個輸出? :
{
"data": [
{
"{#ID}": "test1",
"{#PORT_1111}": "1111"
},
{
"{#ID}": "test2",
"{#PORT_2222}": "2222",
"{#PORT_3333}": "3333"
},
{
"{#ID}": "test3",
"{#PORT_4444}": "4444"
}
]
}
請問您能幫助實現嗎?
讓我再澄清一次。
此JSON文件可以是可改變朝端口值:
{ "data": [ { "{#PROC}": "/usr/local/test", "{#PROC_IDENT}": "test1", "{#PROC_ARGS}": "-l -c -g -k /etc/test1.conf", "{#PROC_PORT_1111}": "1111", "{#PROC_CONF}": "/etc/test1.conf" }, { "{#PROC}": "/usr/local/test", "{#PROC_IDENT}": "test2", "{#PROC_ARGS}": "-l -c -g -k /etc/test2.conf", "{#PROC_PORT_2222}": "2222", "{#PROC_PORT_3333}": "3333", "{#PROC_CONF}": "/etc/test2.conf" }, { "{#PROC}": "/usr/local/test", "{#PROC_IDENT}": "test3", "{#PROC_ARGS}": "-l -c -g -k /etc/test3.conf", "{#PROC_PORT_4444}": "4444", "{#PROC_CONF}": "/etc/test3.conf" } ]}
所以流程實例中的每個可能具有不同量的具有不同值的端口。例如test1可能有1237 7000和1234端口值,test2只有9004等等。
在我的Python代碼中,我能夠實現只讀取端口值之一,但我不知道如何實現,以便它打印每個進程ID的所有端口值。
例如:
{
"data": [
{
"{#ID}": "test1",
"{#PORT_1205}": "1205"
},
{
"{#ID}": "test2",
"{#PORT_442}": "442",
"{#PORT_2004}": "2004"
},
{
"{#ID}": "test3",
"{#PORT_4444}": "9001"
}
]
}
那麼端口值會自動更改JSON文件的修改情況。希望這次我更清楚地解釋。
如果一個進程有多個端口,它們會在json數據中依次顯示*嗎? – wwii
@ user54,結帳我的答案,因爲它顯然符合您的標準 – penta