smaloney,
ReadyAPI evaluates your JSONPath expression correctly. You can check other JSONPath tools, e.g., https://jsonpath.com/ , and you will get the same result.
In your JSON, you have a single JSON object fieldToStateFunctions. So, if you ask how many fieldToStateFunctions objects are, you get 1.
Inside your fieldToStateFunctions, you have the following properties with names:
VALS-GROUP:VAL1
VALS-GROUP:VAL2
VALS-GROUP:VAL3
These are distinct properties with different names, so you cannot easily count them too.
If you have any property which occurs only once inside the VALS-GROUP:VAL, you can use it in your query, e.g., signature:
$.fieldToStateFunctions..signature
Such JSONPath will give you three if you count the result nodes. But if more signatures occur within the element, the test would fail, so check if it is the right element.
Anyway, the JSON is pretty tough to understand. If you simplify the API, it would be easier to use and easier to test as well.
Best regards,
Karel