如果没有错误,则将值赋给变量

时间:2017-01-27 05:00:06

标签: python

我从API获得了一个Json对象。 每次运行脚本时,Json对象的结构可能都不同。

让我们说“json_answer”是json的答案,我正在寻找我想要存储在“var”中的关键'data'的值,每次运行脚本时这个键都不存在。

我想知道这段代码是否有快捷方式(一行):

WorkItemStore workItemStore = teamProjectCollection.GetService<WorkItemStore>();
string queryString = string.Format("SELECT [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State]" +
                           " FROM WorkItems" +
                           " WHERE ([System.TeamProject] = '{0}')" +
                           " AND ([System.WorkItemType] = 'Task' OR [System.WorkItemType] = 'Bug')" +
                           " ORDER BY [System.Id]", "Mtt-Scrum"); ;

// Create and run the query.
Query query = new Query(workItemStore, queryString);
WorkItemCollection witCollection = query.RunQuery();

foreach (Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem workItem in witCollection)
{
    ......
}

编辑:

感谢您的回答,我已经知道了。 但我在字典中看得很深,我不想尝试所有的“级别”。

让我用这个例子来澄清:

try:
    var = json_answer['data']
except:
    var = None

我不知道在哪个级别的dict我可能有问题(密钥存在与否)。 我只是有这个“路径”['数据'] ['值'] ['价值'],如果想知道它是否存在。我怎么能用“get”来做呢?

解决方案:

基于@ Ryan♦解决方案并扩展到包含dict和list里面的JSON文件:

dict = {'data':{'values':{'value':True}}}

print(dict['data']['values'].get('time', False)) # print false
print(dict['data']['values'].get('value', False)) # print True

3 个答案:

答案 0 :(得分:2)

使用.get()。当密钥不存在时,它将返回None

 var = json_answer.get('data')

如果要在密钥不存在时为var变量指定默认值,可以将其指定为.get()函数的第二个参数。

 var = json_answer.get('data', 'default_value')

演示:

import json

jsonobj = json.loads('{"a": "hello"}')
print jsonobj.get('a')
print jsonobj.get('b')
print jsonobj.get('b', "BYE")

输出:

hello
None
BYE

你可以尝试这样的嵌套案例。

c={}
d = {'data':{'values':{'value':True}}}
var1 = d.get('aa', c).get('bb', c).get('cc', c) or None
var2 = d.get('data', c).get('values', c).get('value', c)
print var1
print var2

输出:

None
True

答案 1 :(得分:2)

没有任何内置功能,但是如果你为它编写一个函数,那就相当不错了:

def get_path(obj, keys, default=None):
    for key in keys:
        try:
            obj = obj[key]
        except (KeyError, IndexError):
            return default

    return obj

d = {'data': {'values': {'value': True}}}

print(get_path(d, ['data', 'values', 'time'], default=False))
print(get_path(d, ['data', 'values', 'value'], default=False))

答案 2 :(得分:0)

你可以这样做:

this