I've a similar way of interacting with the API of my product but instead keep everything prefix notation (lispy) so for example;
"and": [ { "property": "material", "operator": "equals", "value": "carbon" },
Would be;
["and", ["=", "material", "carbon"], ...]