Skip to content

Releases: DimQ1/JsonPathPlus

v1.6.2

22 May 14:49

Choose a tag to compare

v1.6.1

22 May 07:30

Choose a tag to compare

Full Changelog: v1.6.0...v1.6.1

v1.6.0: Nested Queries, Zero-Allocation String Ops & Multi-Targeting

22 May 07:15

Choose a tag to compare

What's new in v1.6.0

Multi-targeting (net8.0, net9.0, net10.0, net11.0)

  • Library now targets .NET 8, 9, 10, and 11 with a single package.
  • Added proper NuGet repository metadata (RepositoryUrl, RepositoryType).

What's new in v1.5.0

Nested Query Support

  • Apply sub-paths per key in bracket expressions: \$.store[book[?(@.price<20)][title,author], bicycle[color], name]\
  • Combine filters, field projections, and property access in a single nested expression.

Zero-Allocation String Overloads

  • String-based extension methods now use stream extraction internally.
  • Eliminates UTF-8 encoding and MemoryStream allocations for string inputs.
  • Same extraction engine, zero intermediate allocations.

Pooled Buffer Streaming

  • Replaced
    ew byte[]\ with \ArrayPool\ in \ReadToEndAsync.
  • Reduces LOH (Large Object Heap) pressure for large payloads.

Benchmarks

  • Added nested query benchmarks across all input types (Stream, JsonNode, string).

Validation

  • All 450+ tests pass across net8.0, net9.0, net10.0, net11.0.

v1.4.0: Memory Optimization & Large-File Streaming Foundation

19 May 10:18

Choose a tag to compare

What's new

Phase 2.2: First-match short-circuit traversal

  • \ExtractFirst...\ APIs now use a recursive \TryFindFirstMatch\ traversal that stops at the first match without building intermediate result lists.
  • Covers all 13 segment types: Property, ArrayIndex, ArrayRange, ArrayUnion, PropertyUnion, Filter, ComputedIndex, Wildcard, RecursiveDescent, FieldProjection, FieldExclusion, FieldExistence, FieldCount.
  • Major allocation reduction for first-match queries over large arrays.

LFS-1: Seekless root detection

  • Replaced \StreamReader-based peek with raw byte-level \PeekRootKindFromBytes\ — zero allocation for seekable streams.
  • New \StreamHead\ type flows peek result to extract methods, eliminating duplicate peeking.
  • \CanUseStreaming\ no longer requires \stream.CanSeek\ — non-seekable streams are now supported.
  • Eliminated \GetRootContainerKind\ and \TryPeekRootToken\ (dead code).

Library evolution plan

  • Updated \stream-performance-plan.md\ with large-file streaming requirements and phased roadmap.
  • Set core library requirements: 1 KB → 1 GB payload range, non-seekable stream support, \JsonElement\ return types, \MaxMaterializationBytes\ budget enforcement.

Performance

  • Allocation reduced 61–89% across all stream benchmarks vs v1.0 baseline.
  • Gen2 GC eliminated on wildcard/range stream benchmarks.

Validation

  • 450/450 tests pass across net8.0, net9.0, net10.0.