2016-11-29 88 views
2

我想從JSON文件中提取特定的數據。這是我的代碼。使用python - 只抓取特定值從鍵:值分析對解析JSON

jsonurl = http://localhost:8080/test.json 
a = urllib2.urlopen(jsonurl).read() 
b = json.loads(a) 
    for x, y in b.iteritems(): 
     print x, y 

這裏是我的JSON

{ 
"abc": [ 
    "build=1.0.44.0", 
    "proxy=none" 
], 
"xyz": [ 
    "proxy=https", 
    "build=1.0.127.0" 
], 
"alfa": [ 
    "build=1.0.118.0", 
    "proxy=none" 
], 
"beta": [ 
    "proxy=http" 
    "build=1.0.20.0" 
] 
} 

我得到的所有都鍵和值從JSON,但我只需要提取關鍵:值(建立=)。 我想要的輸出是 abc:1.0.44.0 xyz:1.0.127.0 ....等我嘗試了很多選項,但無法獲得理想的結果。

回答

0

嘗試如下:

data = { 
    "abc": [ 
     "build=1.0.44.0", 
     "proxy=none" 
    ], 
    "xyz": [ 
     "build=1.0.127.0", 
     "proxy=https" 
    ], 
    "alfa": [ 
     "build=1.0.118.0", 
     "proxy=none" 
    ], 
    "beta": [ 
     "build=1.0.20.0", 
     "proxy=http" 
    ] 
} 

res = {} 
for k,v in data.items(): 
    res[k] = v[0].split('=')[1] if 'build=' in v[0] else v[1].split('=')[1] 

或使用字典解析:

res = {k: v[0].split('=')[1] if 'build=' in v[0] else v[1].split('=')[1] for k,v in data.items()} 

輸出:

>>> res 
{'xyz': '1.0.127.0', 'abc': '1.0.44.0', 'alfa': '1.0.118.0', 'beta': '1.0.20.0'} 
+1

這將是字典理解的好地方。 –

+0

@AlexHall補充,以及謝謝:) – ettanany

+0

謝謝@ettanany我明白了。但我的v [0]並不總是我需要的價值。有時它在v [1]。 – ryan1506

1
jsonurl = http://localhost:8080/test.json 
a = urllib2.urlopen(jsonurl).read() 
b = json.loads(a) 
for x, y in b.iteritems(): 
    print x, y 

打印字典中的每個鍵/值。您的每個值實際上都是一個列表,因此要訪問列表項目,您需要使用正確的語法。

for x, y in b.iteritems(): 
    print x, y, y[0] 

將顯示您的密鑰,值和值[0]。

現在,識別列表的元素包含字符串build=

> my_list = ["proxy=https", "build=1.0.127.0"] 
> build_str = [i for i in my_list if 'build=' in i][0] 
> build_str 
build=1.0.127.0 

從那裏,你可以發展你的程序來解析字符串。爲了解析字符串,我通常會尋找一個簡單的'分割'分隔符。在這種情況下,=脫穎而出。 Split會採用一個字符串並在每個分隔符處創建一個包含中斷的列表。

> my_str_as_a_list = "build=1.0.20.0".split('=') 
> my_str_as_a_list 
['build', '1.0.20.0'] 
> my_str_as_a_list[1] 
1.0.20.0 

現在,應用此概念,您的for循環:

for key, value in b.iteritems(): 
    my_str = [i for i in value if 'build=' in i][0] 
    v = my_str.split('=')[1] 
    print '{}:{}'.format(key, v) 

我不知道,如果你想根據您的問題字典/字符串/列表的形式輸出,但你應該能夠輕鬆到達所提供的答案。

+0

感謝。但我的y [0]不是恆定的。我剛剛更新了我的json文件。有時生成值將是y [0]或y [1] – ryan1506

+0

沒問題,更新 – slightlynybbled

+0

謝謝。有效。 – ryan1506

0

只是重複和保持其價值相匹配

output_keys = [key for key, value in myjsons if value[0] == 'build=.....']

沒有一個快速的方法來做到這一點不反覆的關鍵,因爲字典是用於查找上的鍵,而不是值