diff --git a/src/jsonata/utils.py b/src/jsonata/utils.py index 8b43aea..eaab3e2 100644 --- a/src/jsonata/utils.py +++ b/src/jsonata/utils.py @@ -106,9 +106,10 @@ def is_deep_equal(lhs: Optional[Any], rhs: Optional[Any]) -> bool: if not Utils.is_deep_equal(lhs[key], rhs[key]): return False return True - if lhs == rhs and type(lhs) == type(rhs): + if lhs == rhs: + if isinstance(lhs, bool) != isinstance(rhs, bool): + return False return True - return False class JList(list): diff --git a/tests/types_test.py b/tests/types_test.py index 0b8b076..4fbaa33 100644 --- a/tests/types_test.py +++ b/tests/types_test.py @@ -47,3 +47,18 @@ def test_fix_issue_21(self): """ assert jsonata.Jsonata("true = 1").evaluate({}) is False assert jsonata.Jsonata("false = 0").evaluate({}) is False + + def test_fix_issue_23(self): + """ + https://github.com/rayokota/jsonata-python/issues/23 + """ + class PlainScalarString(str): + pass + + data = { + "foo": [ + {"some_attr": PlainScalarString("some_value"), "bar": 17}, + {"some_attr": PlainScalarString("other_value"), "bar": 19}, + ] + } + assert jsonata.Jsonata('foo[some_attr="some_value"].bar').evaluate(data) == 17