Skip to content

Releases: ikelaiah/simplejson-fp

SimpleJSON v1.1.0 - First release (includes v1.0.0 work) 🚀

15 Dec 18:16
90b8ada

Choose a tag to compare

Summary

Small feature release adding a System.JSON compatibility layer, a new ExtractValue helper, several new examples, documentation updates, and ownership/leak clarifications and fixes.

Included from unpublished v1.0.0

  • Namespace rename to SimpleJSON (breaking change from TidyKit.JSON).
  • Interface-based design and core JSON parsing/serialization features (factories, writer, scanner, types).
  • Standards and edge-case fixes: locale-safe number formatting, property-name escaping, Unicode handling, and RFC-8259 compliance improvements.
  • A comprehensive test suite and many example programs (see tests/ and examples/).

(Full details are available in CHANGELOG.md.)

✨ Highlights

  • System.JSON compatibility layer and example suite to ease Delphi → Lazarus/FPC migration.
  • New ExtractValue(Obj: IJSONObject; const Name: string): IJSONValue convenience helper.
  • Improved examples showing find/try-get/remove, path-based access, type-checking, direct JSON types, and cloning.
  • Documentation updates and a test validating ExtractValue.

➕ Added

  • examples/SystemJSON with demos for System.JSON-compatible API and migration patterns.
  • ExtractValue helper to extract (take-and-remove) values from interface-based objects.
  • Multiple example demos demonstrating common migration/use patterns.

🔧 Changed

  • Documentation updates in docs/cheat-sheet.md and docs/SimpleJSON.md to document ExtractValue and clarify remove/extract semantics for interface- vs object-based APIs.

🐛 Fixed

  • Clarified ownership semantics for TJSONObject.RemovePair in src/System.JSON.pas (caller must free returned TJSONPair) and fixed demo code to free removed pairs to avoid leaks.

🧪 Tests

  • Added Test42_ExtractValue unit test validating ExtractValue behavior (returns value and removes key; returns nil for missing keys).

🛠️ Upgrade / Migration Notes

This release includes work originally intended for an unpublished v1.0.0. No action is required unless you specifically need a historical v1.0.0 tag.

  • If your code calls TJSONObject.RemovePair, make sure to free the returned TJSONPair to avoid memory leaks.
  • See examples/SystemJSON and docs/SimpleJSON.md for migration patterns and examples.

🔒 Maintainer note

If you need a historical v1.0.0 tag for archival reasons, create it from the appropriate commit:

git tag -a v1.0.0 <commit-ish> -m "v1.0.0 — internal snapshot (never published)"
git push origin v1.0.0

🔗 References

  • Full changes: CHANGELOG.md
  • Docs: docs/cheat-sheet.md, docs/SimpleJSON.md
  • Examples: examples/SystemJSON