У меня есть этот 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" } ]}
Этот файл читается этим питон сценария:
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')
На данный момент я могу только напечатать только одно значение порта и идентификатор значение на выходе:
{
"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 я смог добиться только чтения одного из значений порта, но я не знаю, как добиться, чтобы он печатал все значения порта для каждого идентификатора процесса.
Например:
{
"data": [
{
"{#ID}": "test1",
"{#PORT_1205}": "1205"
},
{
"{#ID}": "test2",
"{#PORT_442}": "442",
"{#PORT_2004}": "2004"
},
{
"{#ID}": "test3",
"{#PORT_4444}": "9001"
}
]
}
Так значения PORT будет автоматически изменяться в случае модификаций JSon файла. Надеюсь, на этот раз я объяснил более четко.
Если процесс имеет несколько портов, они всегда будут отображаться * последовательно в данных json? – wwii
@ user54, проверка моего ответа, поскольку он явно удовлетворяет вашим критериям – penta