2013-10-03 2 views
2

У меня есть JSON файл так:Как выбрать данные из файла JSON в python?

[ 
{ 
"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

Большое вам спасибо. он работал отлично. –

Смежные вопросы