2016-06-28 165 views
0

我读的蟒蛇以下JSON文件:迭代通过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”),并为每个名称我想读取对象的类型。到目前为止,我的代码列出了所有类似的特性:

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

谢谢你的答案。我明白我做错了什么!非常感谢你! :) –