2016-06-28 10 views
0

Читаю следующий файл JSON в Python:Итерация через JSON [Python]

{ 
    "name": "Property", 
    "base": "PersistedModel", 
    "idInjection": true, 
    "options": { 
    "validateUpsert": true 
    }, 
    "properties": { 
    "uuid": { 
     "type": "string" 
    }, 
    "userID": { 
     "type": "number" 
    }, 
    "address": { 
     "type": "string" 
    }, 
    "price": { 
     "type": "number" 
    }, 
    "lastUpdated": { 
     "type": "string" 
    } 
    }, 
    "validations": [], 
    "relations": { 
    "rooms": { 
     "type": "hasMany", 
     "model": "Room", 
     "foreignKey": "id" 
    }, 
    "addedByUser": { 
     "type": "hasMany", 
     "model": "User_ESPC", 
     "foreignKey": "id" 
    } 
    }, 
    "acls": [], 
    "methods": {} 
} 

Я пытаюсь читать properties и получить имя свойства (например, «UUID») и для каждого name Я хочу прочитать тип объекта. Пока мой код перечисляет все свойства, как, что:

Property name: price 
Property name: userID 
Property name: uuid 
Property name: lastUpdated 
Property name: address 

код, который делает это:

import json 

#json_file='a.json' 
json_file='common/models/property.json' 
with open(json_file, 'r') as json_data: 
    data = json.load(json_data) 


propertyName = data["name"] 
properties = data["properties"] 

# print (properties) 

for property in properties: 
    print ('Property name: ' + property) 
    # propertyType = property["type"] 
    # print (propertyType) 

Проблема заключается в том, когда я раскомментировать нижние 2 строки, которые должны получить тип объект недвижимости Я получаю сообщение об ошибке:

Property name: price 
Traceback (most recent call last): 
File "exportPropertyToAndroid.py", line 19, in <module> 
propertyType = property["type"] 
TypeError: string indices must be integers 

ответ

1

Итерация по словарю дает ключи. properties является словарь:

properties = data["properties"] 

и когда вы итерацию над ним в:

for property in properties: 
    print ('Property name: ' + property) 
    # propertyType = property["type"] 
    # print (propertyType) 

property ссылок каждый ключ в свою очередь. Поскольку ваш словарь представляет данные JSON, ключи являются строками, и ошибка вполне объяснительна. property["type"] пытается получить символ из строки по индексу "type".

Вместо этого вы должны либо использовать ключ property принести дополнительные значения из словаря:

for property in properties: 
    print ('Property name: ' + property) 
    propertyType = properties[property]["type"] 
    print(propertyType) 

или перебирать ключи и значения:

for property, value in properties.items(): 
    print ('Property name: ' + property) 
    propertyType = value["type"] 
    print(propertyType) 
+0

Благодарим Вас за ответ. Я вижу, что я делаю неправильно! Большое спасибо! :) –