Reference Guide
Complete syntax reference, troubleshooting guide, and quick-lookup tables for JSON Path mapping.Quick Syntax Reference
Core Operators
| Operator | Name | Description | Example |
|---|---|---|---|
$ | Root | Document root | $.NODE.data |
. | Dot | Child operator | $.NODE.user.name |
.. | Recursive | Deep scan | $..price |
* | Wildcard | All elements | $.NODE.* |
[] | Brackets | Subscript | $.NODE['property-name'] |
[n] | Array Index | Specific position | $.NODE.items[0] |
[start:end] | Slice | Array range | $.NODE.items[0:3] |
[-n] | Negative Index | From end | $.NODE.items[-1] |
[*] | Array Wildcard | All array items | $.NODE.items[*] |
[?()] | Filter | Conditional selection | $.NODE[?(@.price>10)] |
^ | Parent | Parent reference | $.NODE.child^ |
~ | Property Name | Get key names | $.NODE.*~ |
| | Pipe | Concatenation (custom) | First|$|Last |
QuivaWorks-Specific Extensions
| Feature | Description | Example |
|---|---|---|
| NODE_ID Reference | Reference any node by ID | $.NODE_ID.property |
| Pipe Operator | Concatenate static + dynamic | Name: |$.NODE.name |
| Inline Detection | Use anywhere in object | {"key": "$.NODE.value"} |
| Multi-pipe | Multiple concatenations | $.first| |$.last |
The pipe operator (
|) is a QuivaWorks custom extension not found in standard JSONPath implementations.Array Operations
Array Access Methods
- Index Access
- Slicing
- Wildcards
- Array Properties
Filter Expressions
Filter Syntax Patterns
Basic Filters
Basic Filters
Numeric Comparisons
Numeric Comparisons
Logical Operators
Logical Operators
String Matching
String Matching
Null & Undefined
Null & Undefined
Filter Expression Variables
Special Variables Reference
| Variable | Scope | Description | Example |
|---|---|---|---|
@ | Current | The current node being filtered | ?(@.price>10) |
@.property | Current | Property of current node | ?(@.status==='active') |
@.nested.prop | Current | Nested property access | ?(@.user.age>=18) |
@root | Global | Root of entire JSON document | ?(@[email protected]) |
@parent | Parent | Parent object of current node | ?(@parent.type==='premium') |
@property | Meta | Property name or array index | ?(@property!==0) |
@parentProperty | Meta | Parent’s property name | ?(@parentProperty!=='hidden') |
@path | Meta | JSONPath to current node | ?(@path!==\"$['items'][0]\") |
Special Functions
- Aggregation
- Type Selectors
- Context Access
Comparison Operators
Complete Operator Table
| Operator | Description | Works With | Example |
|---|---|---|---|
=== | Strict equality | All types | ?(@.status==='active') |
!== | Strict inequality | All types | ?(@.type!=='hidden') |
== | Loose equality | All types | ?(@.count==5) |
!= | Loose inequality | All types | ?(@.value!=null) |
< | Less than | Numbers, strings | ?(@.age<18) |
> | Greater than | Numbers, strings | ?(@.price>100) |
<= | Less than or equal | Numbers, strings | ?(@.score<=50) |
>= | Greater than or equal | Numbers, strings | ?(@.quantity>=10) |
&& | Logical AND | Boolean expressions | ?(@.a && @.b) |
|| | Logical OR | Boolean expressions | ?(@.a || @.b) |
! | Logical NOT | Boolean expressions | ?([email protected]) |
Operator Precedence
From highest to lowest priority:- Grouping:
() - Property Access:
.,[] - Logical NOT:
! - Comparison:
<,>,<=,>= - Equality:
===,!==,==,!= - Logical AND:
&& - Logical OR:
||
Common Patterns Quick Reference
Pattern Library
Basic Property Access
Array Operations
Concatenation
Filtering
Deep Scanning
Wildcards
Complex Filters
Combining Patterns
Troubleshooting Guide
Common Errors & Solutions
❌ Undefined or Empty Result
❌ Undefined or Empty Result
Symptoms: Path returns Case SensitivityArray Index Out of BoundsProperty Doesn’t ExistSolutions: Verify node ID matches exactly in flow, check property names in Flow Debugger, test with simpler paths and build up, and use
undefined, filter returns empty array [], or property seems to exist but isn’t found.Common Causes:Incorrect Node ID.length to check array sizes.❌ Filter Not Working
❌ Filter Not Working
Symptoms: Filter returns wrong items, filter returns nothing, or comparison seems correct but fails.Common Causes:Using Missing Quotes on StringsWrong Comparison TypeForgetting Solutions: Always use
= Instead of ===@ in Filter=== for equality (not =), quote string values in comparisons, use @ to reference current node, and check data types match in comparisons.❌ Type Mismatch Errors
❌ Type Mismatch Errors
Symptoms: Comparison fails unexpectedly, filter returns empty when data exists, or inconsistent results.Common Causes:String vs NumberBoolean as StringNull vs UndefinedSolutions: Check source data types in debugger, use loose equality
== if types vary, and convert types in earlier flow nodes if needed.❌ Pipe Operator Issues
❌ Pipe Operator Issues
Symptoms: Pipe concatenation not working, literal Empty/Undefined ValuesWrong Pipe TypeSolutions: Remove spaces around pipes, check all referenced values exist, and remember that
| appears in output, or parts missing from concatenated string.Common Causes:Spaces Around Pipe| is a QuivaWorks custom extension (not standard JSONPath).❌ Performance Issues
❌ Performance Issues
Symptoms: Slow flow execution, timeouts on large datasets, or high memory usage.Common Causes:Deep Scan on Large DataMultiple FiltersUnnecessary WildcardsSolutions: Use specific paths instead of deep scan, combine filter conditions, limit array slicing ranges, and process data in smaller batches if possible.
❌ Special Characters in Property Names
❌ Special Characters in Property Names
Symptoms: Properties with special characters not accessible, syntax errors with property names, or unexpected undefined results.Common Causes:Spaces in Property NamesHyphens/DashesSpecial CharactersNumeric-Starting NamesSolutions: Use bracket notation
['property'] for special characters, spaces, hyphens, @, $, etc., and for properties that start with numbers.Error Messages Reference
Common Error Messages
| Error Message | Cause | Solution |
|---|---|---|
JSONPath syntax error | Invalid JSONPath expression | Check syntax, ensure proper quotes and brackets |
Unexpected token | Malformed JSON or path | Verify JSON structure and path syntax |
Cannot read property of undefined | Accessing non-existent property | Check if property exists before accessing |
Invalid array index | Array index out of bounds | Verify array length, use .length |
Filter expression error | Invalid filter syntax | Check filter uses @, ===, proper operators |
Type error in comparison | Comparing incompatible types | Ensure types match or use loose equality == |
Circular reference | Parent/root creates infinite loop | Avoid self-referential filters |
Maximum call stack exceeded | Infinite recursion in path | Review recursive descent usage .. |
Best Practices
Do’s and Don’ts
- ✅ Do
- ❌ Don't
- ⚡ Performance
- 🔒 Security
Do These Things:✅ Use specific paths when possible:
$.NODE.user.name✅ Use triple equals in filters: ?(@.status==='active')✅ Quote strings in filters: ?(@.type==='premium')✅ Check array length before accessing: $.items.length✅ Use bracket notation for special characters: ['user-id']✅ Combine filters with && and ||: ?(@.a && @.b)✅ Use meaningful node IDs in flows for clarity✅ Test paths with Flow Debugger before deploying✅ Use array slicing for pagination: [0:10]✅ Validate data structures in earlier nodes when possibleTesting Strategies
How to Test Your Paths
1
Start Simple
Begin with basic property access and verify it works:
2
Add Complexity Gradually
Add one feature at a time (arrays, then filters):
3
Use Flow Debugger
Test each path in the Flow Debugger to see actual results before deploying.
4
Test Edge Cases
Test with empty arrays
[], missing properties undefined, null values null, and different data types.5
Verify Output Format
Check if you need an array
[...] or single value, and adjust accordingly:Migration from Other Systems
From Zapier
From Make (Integromat)
From n8n
Key Difference: QuivaWorks uses standard JSONPath syntax with custom extensions, making it more powerful for complex data transformations.
Keyboard Shortcuts & Tips
Flow Builder Shortcuts
| Shortcut | Action |
|---|---|
| Test Path | Click “Test” button in mapping field |
| View Source Data | Open Flow Debugger panel |
| Copy Path | Right-click property in debugger |
| Format JSON | Auto-formats in code view |
| Validate Syntax | Automatic on field blur |
Debugging Tips
Start Small
Test basic path first, then add complexity one step at a time.
Use Console
Test JSONPath expressions in browser console with sample data.
Check Types
Use
typeof or Flow Debugger to verify data types before filtering.Log Intermediate Results
Create intermediate nodes to see transformation steps.
Next Steps
Examples
See real-world usage examples
Advanced Techniques
Learn power user strategies
Filters & Expressions
Deep dive into filtering
Basic Syntax
Review the fundamentals
Quick Reference Card
Print-Friendly Quick Reference
Print-Friendly Quick Reference
JSONPath Cheat Sheet
Basic Syntax:$.NODE.property- Access property$.NODE.array[0]- Array index$.NODE.array[*]- All items$.NODE.array[0:3]- Slice (first 3)$.NODE.array[-1]- Last item$.NODE.array.length- Array length
$.NODE[?(@.property)]- Exists$.NODE[?(@.x===value)]- Equals$.NODE[?(@.x>10)]- Greater than$.NODE[?(@.a && @.b)]- AND$.NODE[?(@.a || @.b)]- OR
Text|$.NODE.value- Concatenate$.NODE.first| |$.NODE.last- With space$.a|, |$.b|, |$.c- Multiple pipes
$.NODE[?(@.active)][0]- First active item$.NODE[*].property- All properties$.NODE[?(@.price<100)].length- Count filtered
- Use
===not= - Quote strings in filters
- Always use
@in filters - Array indexes start at 0
- Negative indexes from end