【问题标题】:Looping through json array in python在python中循环遍历json数组
【发布时间】:2017-11-01 06:02:49
【问题描述】:

我在一个数组中有 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'))

我正在尝试通过 ip 地址使用 python 循环。

for address in data['ip_address']:  
      print(address)

我现在收到一个错误提示

string indices must be integers, not str

【问题讨论】:

  • 显示ip_address 变量是如何创建的
  • 粘贴完整代码。这部分没用。
  • 请不要破坏您的帖子。发布问题后,您已将内容授权给整个 Stack Overflow 社区(根据 CC-by-SA 许可)。如果您想取消此帖子与您帐户的关联,请参阅What is the proper route for a disassociation request?

标签: python arrays json


【解决方案1】:

在你的情况下ip_address = '192.168.0.1'

您确定ip_address 中的值正确吗?

【讨论】:

  • 是的,这个错误只发生在我放入for循环时。这是一个循环问题,无法弄清楚为什么它循环通过单个字符而不是字符串。
  • 因为您将 ip_address 设置为字符串而不是列表。您可以打印变量的类型:print(type(ip_address))
  • for ip in obj['ip_address'] 可以正常工作,obj 是加载的 json
【解决方案2】:

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

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

# prints:
# a
# b
# c

因此,这意味着您在某处将单个 IP 地址分配给变量,然后遍历该变量(这是一个字符串)。如果不提供更多关于如何获取 ip_address 变量的代码,很难说问题出在哪里。

打印您的 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)

【讨论】:

  • 跑了,但我得到一个错误:列表索引必须是整数,而不是 str
  • 这只是一个例子——它很可能在你拥有的代码中不起作用(因为我不知道它的外观)。您应该编辑您的问题以包含更多信息。对于初学者,在 for 循环中定义了 ip_address
  • 我已经更新了答案。我仍然有点不清楚yaml.load(message) 中的message 到底是什么样子,所以很难保证这会起作用。然而,必须做什么的想法应该是清楚的。如果没有,请更新问题,指定 message 的外观(一个小的、工作的 sn-p 就足够了),我会尽力提供帮助。
【解决方案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

它似乎对我来说工作正常。

【讨论】:

  • 因为您正在遍历 list 而这不是问题
猜你喜欢
  • 1970-01-01
  • 2013-02-12
  • 2018-06-19
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-22
相关资源
最近更新 更多