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", "{#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})

用途:

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"
}

关于python - 重新调整现有的 json 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41343472/

相关文章:

python - 为什么 __add__ 没有在 Python 的双端队列中实现?

python - 自定义tensorflow解码器TypeError : __call__() missing 1 required positional argument: 'inputs'

python - 从 Python 中的命名空间对象导入变量

javascript - 向 NodeJS 中的 JSON 对象添加新属性

android - JSON 从数据库中读取 4700 条记录

python - 创建一个包含 2 个变量的列表

json - Golang 使用类型

json - 我可以将带有动画的模型从 MAX 导出到 .json 吗?

Android - 可扩展 ListView 的更好替代方案?

python - 为什么连接器/Python 不执行许多优化插入?