2013-10-03 31 views
2

我有一個JSON文件那樣:如何從python中的JSON文件中選擇數據?

[ 
{ 
"course": "CMPT 102 D1", 
"instructor": "hamarneh", 
"students": [ 
    "axc5", 
    "csf10", 
    "ctu1", 
    "nmw15", 
    "nsm12", 
    "ppy1", 
    "qtg13", 
    "tim1", 
    "tkd10", 
    "vhm8", 
    "vsv1", 
    "wps1", 
    "xup12", 
    "yqt6" 
], 
"title": "Scientific Cmpt.Prgm" 
}] 

,這裏是我的代碼在Python:

import json 
json_data=open('jsonfile') 
data=json.load(json_data) 
print(data['students']) 

,但它顯示了一個錯誤:

print(data['students']) 
    TypeError: list indices must be integers, not str 

請幫助!

而另一個問題: 假設JSON文件包含許多類似上述結構的課程。我怎麼可以這樣做:

Select students, count(course) as course_number from tblstudent 
group by students 
+0

打印「數據」並查看它的外觀。我敢打賭,這是一個口號清單,不是一個字典。 – sashkello

回答

3

你的JSON包含列表,在這一個字典;字典周圍有兩個方括號,[]

選擇的第一要素:

print(data[0]['students']) 

快速演示:

>>> print(data) 
[{'instructor': 'hamarneh', 'course': 'CMPT 102 D1', 'title': 'Scientific Cmpt.Prgm', 'students': ['axc5', 'csf10', 'ctu1', 'nmw15', 'nsm12', 'ppy1', 'qtg13', 'tim1', 'tkd10', 'vhm8', 'vsv1', 'wps1', 'xup12', 'yqt6']}] 
>>> print(data[0]['students']) 
['axc5', 'csf10', 'ctu1', 'nmw15', 'nsm12', 'ppy1', 'qtg13', 'tim1', 'tkd10', 'vhm8', 'vsv1', 'wps1', 'xup12', 'yqt6'] 

請注意,你可能會發現這個自己用的只是data快速打印。

如果這是多個課程的列表,並且您需要計算每個學生,請設置一個包含整數的學生字典。使用collections.defaultdict()可以讓您更容易:

from collections import defaultdict 

courses_per_student = defaultdict(int) 

for course in data: 
    for student in course['students']: 
     courses_per_student[student] += 1 
+0

哦。謝謝。我對JSON非常陌生。如果我想要計算每個學生作爲上面的SQL查詢所需的數量課程,那該怎麼辦? –

+0

@TungPham:對;更新了我的答案。 –

+0

非常感謝。它工作完美。 –