2016-11-29 92 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=.....']

没有一个快速的方法来做到这一点不反复的关键,因为字典是用于查找上的键,而不是值