我从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
答案 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