Php 如何在python中访问深层JSON属性

Php 如何在python中访问深层JSON属性,php,python,json,Php,Python,Json,这段PHP代码可以工作(下面是json): 我在python中也尝试过这样做,但它给了我:字符串索引必须是整数 usaData = json.loads(get_file('usaJson.txt')) for state in usaData['USA']['States']: for city in state['Cities']: zipCode = city['zipcode'] 我的数据结构如下: { "USA":{ "States":{

这段PHP代码可以工作(下面是json):

我在python中也尝试过这样做,但它给了我
:字符串索引必须是整数

usaData = json.loads(get_file('usaJson.txt'))
for state in usaData['USA']['States']:
    for city in state['Cities']:
        zipCode = city['zipcode']
我的数据结构如下:

{
  "USA":{
    "States":{
      "AL":{
        "Cities":[
          {
            "city":"auburn",
            "zipcode":"36830"
          },
          {
            "city":"birmingham",
            "zipcode":"35201"
          }
        ]
      },
      "AK":{
        "Cities":[
          {
            "city":"anchorage",
            "zipcode":"99501"
          },
          {
            "city":"fairbanks",
            "zipcode":"99701"
          }
        ]
      }
    }
  }
}
for state_name, state in usaData['USA']['States'].items():
  for city in state['Cities']
    print city['zipcode']
那么如何在python中访问zipcodes呢

for state in usaData.USA.States:
或者可能是,取决于结构:

for state in usaData.USA.States.all():
编辑:不漂亮,可能需要清理,但这应该可以:

for state in usaData['USA']['States'].keys():
    for cities in usaData['USA']['States'][state]['Cities']:
        print cities['zipcode']
或者可能是,取决于结构:

for state in usaData.USA.States.all():
编辑:不漂亮,可能需要清理,但这应该可以:

for state in usaData['USA']['States'].keys():
    for cities in usaData['USA']['States'][state]['Cities']:
        print cities['zipcode']

您的问题是,在字典上迭代得到的是键,而不是字典中的值。所以你需要的是:

for state_name in usaData['USA']['States']
  for city in usaData['USA']['States'][state_name]['Cities']
    print city['zipcode']
非常难看

更好的版本是使用字典上的
items
函数,如下所示:

{
  "USA":{
    "States":{
      "AL":{
        "Cities":[
          {
            "city":"auburn",
            "zipcode":"36830"
          },
          {
            "city":"birmingham",
            "zipcode":"35201"
          }
        ]
      },
      "AK":{
        "Cities":[
          {
            "city":"anchorage",
            "zipcode":"99501"
          },
          {
            "city":"fairbanks",
            "zipcode":"99701"
          }
        ]
      }
    }
  }
}
for state_name, state in usaData['USA']['States'].items():
  for city in state['Cities']
    print city['zipcode']

您的问题是,在字典上迭代得到的是键,而不是字典中的值。所以你需要的是:

for state_name in usaData['USA']['States']
  for city in usaData['USA']['States'][state_name]['Cities']
    print city['zipcode']
非常难看

更好的版本是使用字典上的
items
函数,如下所示:

{
  "USA":{
    "States":{
      "AL":{
        "Cities":[
          {
            "city":"auburn",
            "zipcode":"36830"
          },
          {
            "city":"birmingham",
            "zipcode":"35201"
          }
        ]
      },
      "AK":{
        "Cities":[
          {
            "city":"anchorage",
            "zipcode":"99501"
          },
          {
            "city":"fairbanks",
            "zipcode":"99701"
          }
        ]
      }
    }
  }
}
for state_name, state in usaData['USA']['States'].items():
  for city in state['Cities']
    print city['zipcode']

“dict”对象没有属性“USA”
这是另一件奇怪的事情。我还以为USA和States是属性。
“dict”对象没有属性“USA”
,这是另一件奇怪的事情。我还以为美国和各州是属性。我得到:
:“list”对象没有属性“items”
Ah oops。这是因为城市是一个列表,而不是一个目录。我会解决它。我得到:
:“list”对象没有属性“items”
啊,糟糕。那是因为城市是一个列表,而不是一个目录。我会修正它。