2013-07-19 18 views
0

我有下面的代碼來查詢和保存JSON響應。查詢返回一個json輸出,但是當我用我的代碼保存它時,我不能再保留json格式。如何從Web查詢中保存JSON內容

file_out='C:\\Users\\ayush488\\Desktop\\annotation_for_new_dataset\\url'+str(cnt)+'.txt' 
    cnt=cnt+1 

    response=urllib2.urlopen('http://www.diffbot.com/api/article?token='+token+'&url='+url).read() 
    with open(file_out,'w') as outfile: 
     json.dump(response,outfile) 

任何人都可以告訴如何正確保存json內容嗎?

這裏是輸出的樣品:

"{\"icon\":\"http:\\/\\/open.blogs.nytimes.com\\/favicon.ico\",\"author\": 
+0

'outfile.write(響應)' –

+0

感謝。有效!! –

回答

4

您是雙重編碼JSON響應。

您正在收到字符串值,其中一個json.loads()可能會變成Python對象。要將該響應保存到文件,請不要進行編碼,不要解碼,直接將其保存到文件對象。最有效的方法是使用shutil.copyfileobj()

import shutil 

response=urllib2.urlopen('http://www.diffbot.com/api/article?token='+token+'&url='+url).read() 
with open(file_out,'w') as outfile: 
    shutil.copyfileobj(response, outfile) 
+0

爲什麼copyfileobj比outfile.write(響應)更有效? –

+0

因爲它會將響應以塊的形式傳輸,如果它很大的話。 –