2013-08-25 10 views
2

я в настоящее время эти данные в файле, который несколько строк JSON (около 13k строк, но в приведенном ниже примере укорачивается:Преобразование многострочный JSON в словарь питона

{"first_name":"John","last_name":"Smith","age":30} 
{"first_name":"Tim","last_name":"Johnson","age":34} 

У меня есть следующий код:

import json 
import codecs 

with open('brief.csv') as f: 
    for line in f: 
     tweet = codecs.open('brief.csv', encoding='utf8').read() 
     data = json.loads(tweet) 
print data 
print data.keys() 
print data.values() 

Если у меня есть только один ряд данных в моем файле, это отлично работает. Однако я не могу понять, как идти по строке, чтобы изменить каждую строку в словаре. Когда я пытаюсь запустить это на несколько строк, я получаю значение ValueError (errmsg («Дополнительные данные», s конец, len (s))) из-за кода, который только хочет иметь дело w с двумя фигурными скобками, IE - первая строка. В конечном итоге я хочу иметь возможность выбирать определенные ключи (например, first_name и age), а затем распечатывать только те значения из моего файла.

Любая идея, как это сделать?

ответ

1

Вы читаете весь файл один раз для каждой строки ... попробовать что-то вроде этого:

import json 
import codecs 

tweets = [] 

with codecs.open('brief.csv', encoding='utf8') as f: 
    for line in f.readlines(): 
     tweets.append(json.loads(line)) 

print tweets 

for tweet in tweets: 
    print tweet.keys() 
    print tweet['last_name'] 
+0

это список словарей .... что бы вы предпочли? – simon

+0

Я только что видел ваше редактирование. Это определенно работает. Благодаря!! – Christopher

+0

(редактирование было только для того, чтобы сделать его более очевидным, что делала начальная часть, fwiw - рад, что у вас есть то, что вам нужно сейчас :)) – simon

0

Может быть, вы можете попробовать, как показано ниже более упростить

>>> import simplejson as json 
>>> with open("brief.csv") as f: 
...  for line in f: 
...   data = json.loads(line) 
...   print data 
...   print data.values() 
...   print data.keys() 

{'first_name': 'John', 'last_name': 'Smith', 'age': 30} 
['John', 'Smith', 30] 
['first_name', 'last_name', 'age'] 
{'first_name': 'Tim', 'last_name': 'Johnson', 'age': 34} 
['Tim', 'Johnson', 34] 
['first_name', 'last_name', 'age'] 
Смежные вопросы