2012-01-06 63 views
1

这个PHP代码工作(以下JSON):如何访问深JSON在Python属性

$usaData = json_decode(stripslashes(file_get_contents('usaJson.txt')),true); 
foreach($usaData['USA']['States'] as $state){ 
    foreach($state['Cities'] as $city){ 
      $zipCode = $city['zipcode']; 
     } 
    } 
} 

我试图做同样的蟒蛇,但它给了我<type 'exceptions.TypeError'>: string indices must be integers

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

那么如何访问python中的zipcode?

回答

0
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'] 
+0

''字典'物体没有属性'USA'' 这是另一个好奇的事情。我还认为美国和各国是属性。 – ofko 2012-01-06 04:32:02

1

您的问题是迭代通过字典给你的关键,而不是在字典中的价值。所以,你需要的是这样的:

for state_name in usaData['USA']['States'] 
    for city in usaData['USA']['States'][state_name]['Cities'] 
    print city['zipcode'] 

这是非常丑陋的

一个更好的版本是使用在字典中的items功能,它看起来像这样:

for state_name, state in usaData['USA']['States'].items(): 
    for city in state['Cities'] 
    print city['zipcode'] 
+0

我得到了:':'list'对象没有属性'items'' – ofko 2012-01-06 05:20:59

+0

啊哎呀。这是因为城市是一个清单,而不是一个字典。我会解决它。 – 2012-01-06 06:17:10