我在Python中使用JMESPath来有效地解析大型词典/列表。
我有一个字典列表,对于每个字典我想获得某个值或返回null并将结果放入列表中。即我从每个字典中选择一个字段,但包括一个空值,其中该字段不存在。
例如,我的输入是:
Template.user.helpers({
"getValueForChecked": function(value){
var loggedInUser = Meteor.userId();
var credentials= (Roles.userIsInRole(loggedInUser, [value]));
return credentials? "checked" : ""
} ,
//or alternatively you can use one helper per field
"isAdmin": function(){
var loggedInUser = Meteor.userId();
var admin = (Roles.userIsInRole(loggedInUser, ['admin']));
return admin ? "checked" : ""
},
"isEditor": function(){
var loggedInUser = Meteor.userId();
var editor = (Roles.userIsInRole(loggedInUser, ['editor']));
return editor? "checked" : ""
}
});
我想要的结果是:
[
{
'foo': {'bar': 'yes1'}
},
{
'foo': {'bar': 'yes2'}
},
{
'foo1': {'bar': 'no'}
}
]
因此,对于列表中的每个字典,我想要路径['yes1', 'yes2', None]
,或者如果路径不存在,我想返回foo.bar
。我想要的伪JMESPath表达式是:
None
即。选择所有列表,然后尝试路径foo.bar或返回文字null。 但是括号在语法上是不正确的。如何将OR表达式封装在括号中?我得到的最佳JMESPath表达式是:
[*]( foo.bar||`null` )
前两个术语[*][foo.bar||``][]
将每个元素放入嵌套到列表[*][foo.bar||``]
中的列表中,然后[['yes1'], ['yes2'], ['']]
将返回的列表展平。然而,这非常令人沮丧并且阻止我返回null,所以我返回一个空字符串。
有人有任何想法吗?我在语法上遗漏了什么吗?
先谢谢。