【问题标题】:Trouble with adding information to JSON library in Python在 Python 中向 JSON 库添加信息时遇到问题
【发布时间】:2021-02-16 13:42:13
【问题描述】:

所以我最近一直在尝试使用 python 构建一个动态 JSON 库,但我在循环数据时遇到了问题。这个问题可能很容易解决,但我对编程非常陌生,尤其是使用 JSON 时。

基本上,我正在尝试输出类似于以下内容的 JSON 输出:

    {
      "src_host": [
        "list item 1",
        [
          "SSH",
          "Telnet",
          "STMP"
        ]
      ]
    },
    {
      "src_host": [
        "list item 2",
        [
          "SSH",
          "Telnet",
          "STMP"
        ]
      ]
    }

我想用另一个列表中的单个条目填充每个“src_host”列表。我基本上想为提供的每个列表项定义一个 src_host 。我使用的代码如下所示:

host_dict = {}
host_dict["src_host"] = []
host_services_list = ["SSH","Telnet","STMP"]

mylist = ["list item 1", "list item 2"]

counter = 0

for item in mylist:
    json_data['zone'][0]['hosts'].append(host_dict)
    host_dict['src_host'].append(mylist[counter])
    counter = counter + 1

host_dict['src_host'].append(host_services_list)

我遇到的问题似乎与我为填充 Json 数据所做的循环有关。由于某种原因,我无法弄清楚,当我执行此代码时,Json 输出如下所示:

    {
      "src_host": [
        "list item 1",
        "list item 2",
        [
          "SSH",
          "Telnet",
          "STMP"
        ]
      ]
    },
    {
      "src_host": [
        "list item 1",
        "list item 2",
        [
          "SSH",
          "Telnet",
          "STMP"
        ]
      ]
    }

如您所见,列表项“列表项 1”和“列表项 2”被附加到每个 src_host 列表中,而不是“列表项 1”被添加到第一个 src_host 和“列表项 2”被添加到第二个。

我假设我的逻辑在这里有缺陷,或者我错过了一些超级简单的东西,但我目前似乎无法解决这个问题并想寻求帮助。

感谢您的所有帮助!

注意: ['zone'][0]['hosts'] 是因为这部分 Json 是较大 Json 文件中的一小部分。我认为没有必要显示 Json 文件的每一部分,但仍想解释一下以防万一。

【问题讨论】:

  • 您真的希望所有嵌套信息都是列表吗?我会为那些嵌套项目使用字典,因此如果列表中只有一个项目,您不必执行所有 [0]

标签: python json loops logic


【解决方案1】:

我不认为这种数据结构会给你带来任何好处,但这里有一个超级简单的列表理解来完成它:

host_title = 'src_host'
host_services_list = ['SSH', 'Telnet', 'STMP']
mylist = ['list item 1', 'list item 2']

hosts = [{host_title: [item, host_services_list]}
         for item in mylist]

import json
print(json.dumps(hosts, indent=2))

输出:

[
  {
    "src_host": [
      "list item 1",
      [
        "SSH",
        "Telnet",
        "STMP"
      ]
    ]
  },
  {
    "src_host": [
      "list item 2",
      [
        "SSH",
        "Telnet",
        "STMP"
      ]
    ]
  }
]

这里的关键是从mylist 开始并从那里构建数据,但这可能无法正常工作,具体取决于其余数据的结构。

【讨论】:

  • 这实际上正是我所希望的。通过一些轻微的修改,我能够在我的代码中使用这个结构并且它工​​作得很好。非常感谢您的精彩回答!我会公开支持您的回答,但目前我的声誉太低了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 2016-01-13
  • 2021-03-01
  • 2011-06-10
  • 2017-09-09
  • 2012-12-20
相关资源
最近更新 更多