在python中循环通过json数组

在python中循环通过json数组,python,arrays,json,Python,Arrays,Json,我将JSON导入脚本的数组中 "ip_address": [ "192.168.0.1", "192.168.0.2", "192.168.0.3" ] 我正在加载JSON并声明一个名为ip_address的变量 data = yaml.load(message) for d in data: ip_address = (d.get('ip_address')) 我正在尝试使用python通过ip地址进行循环 for address in data['ip_addr

我将JSON导入脚本的数组中

"ip_address": [
"192.168.0.1",
"192.168.0.2",
"192.168.0.3"
]
我正在加载JSON并声明一个名为ip_address的变量

data = yaml.load(message)
    for d in data: 
        ip_address = (d.get('ip_address'))
我正在尝试使用python通过ip地址进行循环

for address in data['ip_address']:  
      print(address)
我现在得到一个错误,告诉我

string indices must be integers, not str
在您的情况下,ip_地址='192.168.0.1'

您确定ip_地址中的值正确吗?

在您的情况下,ip_地址='192.168.0.1'


您确定ip_地址中的值正确吗?

它打印单个数字的原因是因为地址是字符串。因此,打印的不是每个数字,而是字符串中的每个字母。考虑:

word = "abc"
for letter in word:
    print(letter)

# prints:
# a
# b
# c
因此,这意味着您要在某个地方将单个IP地址分配给一个变量,然后遍历该变量,该变量是一个字符串。如果不提供更多关于如何获取ip_地址变量的代码,就很难说问题出在哪里

打印IP地址的一种方法是假设您在dict中有IP地址:

addresses = {"ip_address": [
    "192.168.0.1",
    "192.168.0.2",
    "192.168.0.3"
]}

for address in addresses["ip_address"]:  # this gets you a list of IPs
      print(address)
即使您在其他地方有它们,关键的洞察是不要在字符串上迭代,因为您将得到字符,除非这是您想要的

更新以解决编辑问题

既然我没有这个文件,它是一个文件吗?您正在加载,我将假定我有您发布的确切字符串。这是您使用提供的数据打印每个地址的方式。请注意,您的情况可能略有不同,因为我不知道完整的代码

# the string inside load() emulates your message
data = yaml.load('"ip_address": ["192.168.0.1", "192.168.0.2", "192.168.0.3"]')
ip_addresses = data.get('ip_address')

for address in ip_addresses: 
    print(address)

它打印单个数字的原因是因为地址是一个字符串。因此,打印的不是每个数字,而是字符串中的每个字母。考虑:

word = "abc"
for letter in word:
    print(letter)

# prints:
# a
# b
# c
因此,这意味着您要在某个地方将单个IP地址分配给一个变量,然后遍历该变量,该变量是一个字符串。如果不提供更多关于如何获取ip_地址变量的代码,就很难说问题出在哪里

打印IP地址的一种方法是假设您在dict中有IP地址:

addresses = {"ip_address": [
    "192.168.0.1",
    "192.168.0.2",
    "192.168.0.3"
]}

for address in addresses["ip_address"]:  # this gets you a list of IPs
      print(address)
即使您在其他地方有它们,关键的洞察是不要在字符串上迭代,因为您将得到字符,除非这是您想要的

更新以解决编辑问题

既然我没有这个文件,它是一个文件吗?您正在加载,我将假定我有您发布的确切字符串。这是您使用提供的数据打印每个地址的方式。请注意,您的情况可能略有不同,因为我不知道完整的代码

# the string inside load() emulates your message
data = yaml.load('"ip_address": ["192.168.0.1", "192.168.0.2", "192.168.0.3"]')
ip_addresses = data.get('ip_address')

for address in ip_addresses: 
    print(address)
我尝试了以下几点:

ip_address = [ "192.168.0.1", "192.168.0.2", "192.168.0.3" ]

>>> ip_address = [ "192.168.0.1", "192.168.0.2", "192.168.0.3" ]

>>> 

>>> for i in ip_address:  

...     print i
。。。 它是印刷的

192.168.0.1

192.168.0.2

192.168.0.3
它似乎对我很有效。

我尝试了以下几点:

ip_address = [ "192.168.0.1", "192.168.0.2", "192.168.0.3" ]

>>> ip_address = [ "192.168.0.1", "192.168.0.2", "192.168.0.3" ]

>>> 

>>> for i in ip_address:  

...     print i
。。。 它是印刷的

192.168.0.1

192.168.0.2

192.168.0.3

它对我来说似乎工作得很好。

演示ip_地址变量是如何创建的。请使用完整的代码。这部分没用。请不要破坏你的帖子。一旦您发布了一个问题,您就已经根据CC by SA许可证将内容授权给了Stack Overflow社区。如果您想解除此帖子与您的帐户的关联,请参阅?演示如何创建ip_地址变量粘贴完整代码。这部分没用。请不要破坏你的帖子。一旦您发布了一个问题,您就已经根据CC by SA许可证将内容授权给了Stack Overflow社区。如果您想取消此帖子与您的帐户的关联,请参阅?是的,此错误仅在我放入for循环时发生。这是一个循环问题,无法理解为什么它通过单个字符而不是字符串循环。因为您将ip_地址设置为字符串而不是列表。您可以打印变量的类型:printtypeip_addressfor obj中的ip['ip_address']可以正常工作,其中obj是加载的jsonYes,只有当我将for循环放入时才会发生此错误。这是一个循环问题,无法理解为什么它通过单个字符而不是字符串循环。因为您将ip_地址设置为字符串而不是列表。您可以打印变量的类型:printtypeip_address for ip in obj['ip_address']可以正常工作,其中obj是加载的JSON,因为您在遍历列表,而这不是问题,因为您在遍历列表,而这不是问题,但我得到一个错误:列表索引必须是整数,不是str这只是一个例子-它很可能在您拥有的代码中不起作用,因为我不知道它看起来如何。您应该编辑您的问题以包含更多信息。首先,在For循环中定义了ip_地址。我已经更新了答案。我仍然有点不清楚yaml.loadmessage中的消息到底是什么样子的,所以很难保证它能正常工作。然而,必须做什么的想法应该是明确的。如果没有,请更新问题,指定什么消息看起来像一个小的、工作的代码段就足够了,我会尽力帮助。运行这个,但我得到一个错误:列表索引必须是整数,而不是标准。这只是一个示例-它很可能在您的代码中不起作用,因为我不知道它看起来如何。你
应编辑您的问题以包含更多信息。首先,在For循环中定义了ip_地址。我已经更新了答案。我仍然有点不清楚yaml.loadmessage中的消息到底是什么样子的,所以很难保证它能正常工作。然而,必须做什么的想法应该是明确的。如果没有,请更新问题,指定什么消息看起来像一个小的,工作的片段就足够了,我会尽力帮助。