2011-10-14 129 views
142

我的項目目前正在接收python中的JSON消息,我需要從中獲取一些信息。對於這個目的,讓我們將它設置爲一些簡單的JSON字符串中的:在Python中解析JSON

jsonStr = '{"one" : "1", "two" : "2", "three" : "3"}' 

到目前爲止,我一直在使用列表生成JSON請求,然後json.dumps但要做到這樣,我想我需要相反的使用json.loads但我沒有太多運氣。任何人都可以給我一個片段,在上面的例子中輸入「two」會返回「2」嗎?

回答

282

很簡單:

import json 
j = json.loads('{"one" : "1", "two" : "2", "three" : "3"}') 
print j['two'] 
+1

謝謝。我現在覺得很愚蠢,我試圖通過索引來做... –

+0

另外,如果你需要更好的性能,請看[simplejson](http://code.google.com/p/simplejson/)。更新的版本提供了大大改進讀寫的優化。 – Unode

+1

我實際上已經在使用simplejson:'將simplejson導入爲json'。忘了提,但謝謝:) –

60

有時候你的JSON是不是字符串。例如,如果你從一個URL獲取一個JSON這樣的:

j = urllib2.urlopen('http://site.com/data.json') 

,你將需要使用json.load,不json.loads:

j_obj = json.load(j) 

(很容易忘記:對's'代表'字符串')

+1

不知道,謝謝! –

+0

只需添加一下,即可以通過調用j.read()來獲取字符串內容,然後使用loads方法。在這種情況下,load()方法負責調用.read() – redobot

23

對於URL或文件,請使用json.load()。對於具有.json內容的字符串,請使用json.loads()。

#! /usr/bin/python 

import json 
from pprint import pprint 

#json_file='a.json' 
json_file='my_cube.json' 
cube='1' 

json_data=open(json_file) 
data = json.load(json_data) 
#pprint(data) 
json_data.close() 

print "Dimension: ", data['cubes'][cube]['dim'] 
print "Measures: ", data['cubes'][cube]['meas'] 
15

下面是簡單的例子,可以幫助你:

json_string = """ 
{ 
    "pk": 1, 
    "fa": "cc.ee", 
    "fb": { 
     "fc": "", 
     "fd_id": "12345" 
    } 
}""" 

import json 
data = json.loads(json_string) 
if data["fa"] == "cc.ee": 
    data["fb"]["new_key"] = "cc.ee was present!" 

print json.dumps(data) 

上面的代碼的輸出將是:

{"pk": 1, "fb": {"new_key": "cc.ee was present!", "fd_id": "12345", 
"fc": ""}, "fa": "cc.ee"} 

請注意,您可以設置轉儲的IDENT參數(例如,使用print json.dumps(data,indent = 4)時):

{ 
    "pk": 1, 
    "fb": { 
     "new_key": "cc.ee was present!", 
     "fd_id": "12345", 
     "fc": "" 
    }, 
    "fa": "cc.ee" 
}