How to Use JSON Path
JSONPath, a query language for navigating JSON and other tree-structured data, is being embedded in tools like PostgreSQL, kubectl, OpenAPI overlays, and GUI clients to filter, extract, and transform complex payloads without writing full programs. Commenters weigh its benefits—standardized, cross-language querying and expressive selection—against drawbacks such as performance concerns, injection risks, fragmented syntaxes (JSONPath, JMESPath, jq, etc.), and the maintenance burden of mini-DSLs compared to using regular programming languages. Several alternative approaches and tools are highlighted, from jq and JSONata to schema-inspection utilities, reflecting broader tensions between convenience, safety, and long-term readability when working with semi-structured data.
Use Cases and Tools
- JSONPath is used for querying and filtering JSON in databases (PostgreSQL JSONPath, SQLite’s
json_extractsubset), CLIs (kubectl), API tooling (OpenAPI Overlays, Spectral), REST clients (Insomnia, Bruno), and localization of JSON fields. - Several tools support JSONPath-like syntax or JSON querying: jsonata (functional query/transform language, Turing-complete), jq-like
fqfor many binary formats, visualization/editors (OK JSON), schema/size profilers (json_profile), and libraries focused on path-based access (unify-jdocs). - Some projects convert JSON to XML DOM to reuse XPath/CSS selectors instead of inventing new DSLs.
Data Model and Cross-Format Paths
- JSON and similar formats (YAML, TOML, Python dicts) are seen as tree-structured, “nested maps/arrays,” “documents,” “semi-structured data,” or “general-purpose hierarchical data formats.”
- XML differs by interleaving text and elements; that is ergonomically good for documents, but less aligned with typical programming data structures, which helped JSON win for machine data.
- A truly generic path language across JSON/YAML/XML/etc. is debated: node types and data-type differences make a clean, shared abstraction hard.
Merits and Drawbacks of JSONPath-like DSLs
- Critics argue these mini-languages add complexity and maintenance risk without beating normal code using comprehensions, map/filter, etc., especially when you need function calls, null-safety, or parameterization.
- Supporters highlight:
- Concise one-liners for CLIs and configs.
- Reuse of the same query across languages, clients, and servers.
- Restricted power (non–Turing-complete) for safety and analyzability.
- Necessity in ecosystems where JSONPath is mandated (e.g., OpenAPI Overlays).
Security and Safety
- Concerns are raised about future “JSONPath injection” analogous to XPath injection if user-supplied fragments are interpolated without parameterization.
- It’s unclear whether the ecosystem will provide robust, standardized parameterized-query mechanisms.
Performance and Implementation Issues
- One report suggests JSONPath usage in a Node service may cause slowdowns; others note performance is highly dependent on the specific implementation.
Ecosystem Fragmentation & Ergonomics
- There are many incompatible syntaxes: JSONPath, jq, JMESPath (AWS), database-specific variants, making muscle memory difficult.
- Some wish for a simpler, file-path-like JSON notation for error reporting and basic access.
- LLMs are seen as helpful for generating/explaining JSONPath and regexes, especially for complex tree queries.