2009-11-12 116 views
2

我對Python真的很陌生,但是我選擇了一個與工作相關的問題,我想我應該如何去做,我會一路學習。在Python 2.6中使用JSON?

我有一個目錄完整的JSON格式的文件。我已經儘可能地將目錄中的所有內容導入到列表中,並遍歷列表來做一個簡單的打印來驗證我獲得了數據。

我想弄清楚如何實際使用Python中給定的JSON對象。在JavaScript中,它的操作非常簡單

var x = {'asd':'bob'} 
alert(x.asd) //alerts 'bob' 

訪問對象的各種屬性是簡單的點符號。什麼是Python的等價物?

所以這是我的代碼,正在進行導入。我想知道如何處理存儲在列表中的單個對象。

#! /usr/local/bin/python2.6 

import os, json 

#define path to reports 
reportspath = "reports/" 

# Gets all json files and imports them 

dir = os.listdir(reportspath) 

jsonfiles = [] 

for fname in dir: 
    with open(reportspath + fname,'r') as f: 
     jsonfiles.append(json.load(f)) 

for i in jsonfiles: 
    print i #prints the contents of each file stored in jsonfiles 
+1

閱讀http://docs.python.org/library/json.html – jldupont 2009-11-12 21:58:24

+2

如果有人想在Python年齡超過2.6 JSON的工作,我建議'simplejson'模塊。官方的JSON支持是從'simplejson'改編的,所以它們應該非常相似。 http://code.google.com/p/simplejson/ – steveha 2009-11-12 23:14:35

回答

11

你當你json.load包含Javascript對象,如{'abc': 'def'}的JSON格式的文件是一個Python dictionary(通常親切地稱爲dict)(在這種情況下恰好有相同的文字表述作爲Javascript對象)。

要訪問特定項目,您需要使用索引編制mydict['abc'],而在Javascript中,您需要使用屬性訪問表示法myobj.abc。你在Python中使用屬性訪問符號得到的是可以在你的字典中調用的方法,例如mydict.keys()將給出['abc'],這是一個包含字典中存在的所有鍵值的列表(在這種情況下,只有一個鍵值)一個字符串)。

字典功能極其豐富,有豐富的方法可以讓你頭腦發熱,並且可以支持很多Python語言結構(例如,你可以循環使用字典,for k in mydict:k將逐步瀏覽字典鍵,迭代地和順序地)。

+0

有沒有簡單的方法可以很好地打印JSON對象,只顯示鍵和沒有數據?將很容易看到這樣的對象的關鍵結構 – Geuis 2009-11-12 23:42:51

+1

呃,它不是一個真正的JSON對象,一旦你加載它...這是一個字典。但無論如何嘗試「打印mydict.keys()」 – 2009-11-13 00:14:15

+0

import pprint; pprint.pprint(mydict.keys()) – monkut 2009-11-13 01:21:54

-1

要訪問所有屬性,請在追加列表之前嘗試使用eval()語句。

,如:

import os 

#define path to reports 
reportspath = "reports/" 

# Gets all json files and imports them 

dir = os.listdir(reportspath) 


for fname in dir: 
    json = eval(open(fname).read()) 
    # now, json is a normal python object 
    print json 
    # list all properties... 
    print dir(json) 
+0

這是有效的,如果你在結果對象上使用'repr()'你再次獲得JSON。然而!使用JSON庫會更好; 'eval()'是一個可怕的安全漏洞;如果你從互聯網上下載了一些JSON,它可能包含危險的代碼。你可以把本地Python的東西放在你的dict中,repr()可能會混淆JSON;例如,如果你在你的字典中放置一個元組,結果將不是合法的JSON。 (JSON有方括號「[]」的列表,但括號中沒有元組。) – steveha 2009-11-12 23:10:13

+0

感謝您的意見。 「eval()是一個可怕的安全漏洞」 是的!如果來源不安全。 – 2009-11-12 23:25:29

+0

如何在不使用「eval」的情況下執行此操作,您應該使用哪種JSON方法? – vgoklani 2012-01-10 22:05:31