diff --git a/jmespath/visitor.py b/jmespath/visitor.py index 15fb177..b02e0f2 100644 --- a/jmespath/visitor.py +++ b/jmespath/visitor.py @@ -129,6 +129,8 @@ def visit_subexpression(self, node, value): result = value for node in node['children']: result = self.visit(node, result) + if (result is None): + return None return result def visit_field(self, node, value): @@ -228,16 +230,12 @@ def visit_literal(self, node, value): return node['value'] def visit_multi_select_dict(self, node, value): - if value is None: - return None collected = self._dict_cls() for child in node['children']: collected[child['value']] = self.visit(child, value) return collected def visit_multi_select_list(self, node, value): - if value is None: - return None collected = [] for child in node['children']: collected.append(self.visit(child, value)) diff --git a/tests/compliance/pipe.json b/tests/compliance/pipe.json index b10c0a4..3f1f15d 100644 --- a/tests/compliance/pipe.json +++ b/tests/compliance/pipe.json @@ -126,6 +126,10 @@ { "expression": "foo[*].bar[*] | [0][0]", "result": {"baz": "one"} + }, + { + "expression": "`null`|[@]", + "result": [ null ] } ] }]