2013-08-25 39 views
2

我現在有在一個文件,該文件是多個JSON行(約13K行,但下面的例子中被縮短這樣的數據:轉換多JSON來Python字典

{"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(「Extra data」,s end,len(s)))錯誤,因爲代碼只是想處理w ith兩個花括號,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']