Skip to content

Releases: wneessen/niljson

v0.1.0: Omitted fields support

11 Sep 09:42
34dd908
Compare
Choose a tag to compare

This release adds the Omitted() method to the Variable type, which allows the user to identify if a null JSON value was present as actual null or completely omitted from the JSON. This can be helpful in case the user requires the JSON to have some mandatory fields.

What's Changed

Full Changelog: v0.0.5...v0.1.0

v0.0.5: Cleanup release

11 Sep 09:10
ab766b2
Compare
Choose a tag to compare
Pre-release

This is a code cleanup release. It doesn't add any functionality but introduces some code cleanups (and CI/CD workflow additions).

What's Changed

  • Add SonarQube integration for code analysis by @wneessen in #4
  • Fix Go version syntax in SonarQube workflow by @wneessen in #5
  • Code cleanup by @wneessen in #6
  • Refactor error messages in niljson tests. by @wneessen in #7
  • More code cleanup and security workflows by @wneessen in #8
  • Fix typo and improve readability in README.md by @wneessen in #9

Full Changelog: v0.0.4...v0.0.5

v0.0.4: JSON marshalling support

02 Sep 10:21
02d6e1f
Compare
Choose a tag to compare

This release introduces a NewVariable method for creating generics-based Variable types. I also added the MarshalJSON methods to support JSON encoding for the various Nil types, ensuring proper handling of nil values.

What's Changed

  • Add JSON marshaling support for Variable types by @wneessen in #3

Full Changelog: v0.0.3...v0.0.4

v0.0.3: Removed Get()

01 Sep 19:18
25913bb
Compare
Choose a tag to compare

The Get() method was simply an alias for the Value() method and did not add any functionality. This simplification makes the code cleaner and reduces unnecessary duplication, improving maintainability.

What's Changed

Full Changelog: v0.0.2...v0.0.3

v0.0.2: UInt types

01 Sep 17:54
b11f825
Compare
Choose a tag to compare

This release adds null-able uint types.

What's Changed

New Contributors

Full Changelog: v0.0.1...v0.0.2

v0.0.1: Initial release

01 Sep 15:08
bdd7efe
Compare
Choose a tag to compare

Welcome to niljson

niljson provides a simple and efficient way to handle nullable JSON fields during the unmarshalling process.
In JSON, it's common to encounter fields that can be null, but handling these fields in Go can be cumbersome,
especially when dealing with primitive types like int, float64, bool. These types can all be either 0 (as value)
or null. In Go you can always work with pointers but these, of course, can lead to unhandled nil pointer dereferences.

niljaon addresses this challenge by offering a set of types that can seamlessly handle null values during
unmarshalling, allowing your Go applications to work with JSON data more naturally and with fewer boilerplate
checks for nil values.

Key Features

  • Nullable Types: Provides a range of nullable types (NilString, NilInt, NilFloat, NilBool, etc.) that
    are easy to use and integrate into your existing Go structs.
  • Seamless Integration: These types work just like Go's standard types but add support for null values,
    enabling cleaner and more maintainable code.
  • JSON Unmarshalling Support: Automatically handles the unmarshalling of JSON fields, converting null JSON
    values to Go's nil or zero values, depending on the context.
  • Minimalistic and Lightweight: Designed to be lightweight and unobtrusive, so it won't bloat your application
    or introduce unnecessary dependencies (only relies on the Go standard library)

Example Usage

package main

import (
    "encoding/json"
    "fmt"
    "os"
    
    "github.com/wneessen/niljson"
)

type JSONType struct {
    Bool       niljson.NilBoolean `json:"bool"`
    Float32    niljson.NilFloat32 `json:"float32,omitempty"`
    Float64    niljson.NilFloat64 `json:"float64"`
    Int        niljson.NilInt     `json:"int"`
    Int64      niljson.NilInt64   `json:"int64"`
    NullString niljson.NilString  `json:"nil"`
    String     niljson.NilString  `json:"string"`
}

func main() {
  data := []byte(`{
 		"bytes": "Ynl0ZXM=",
		"bool": true,
		"float32": null,
		"float64":0,
		"int": 123,
		"int64": 12345678901234,
		"nilvalue": null,
		"string":"test"
	}`)

  var example JSONType
  var output string
  if err := json.Unmarshal(data, &example); err != nil {
    fmt.Println("failed to unmarshal JSON:", err)
    os.Exit(1)
  }

  if example.Bool.NotNil() {
    output += fmt.Sprintf("Bool is: %t, ", example.Bool.Value())
  }
  if example.Float32.IsNil() {
    output += "Float 32 is nil, "
  }
  if example.Float64.NotNil() {
    output += fmt.Sprintf("Float 64 is: %f, ", example.Float64.Value())
  }
  if example.String.NotNil() {
    output += fmt.Sprintf("String is: %s", example.String.Value())
  }
  fmt.Println(output)
}

Full Changelog: https://github.com/wneessen/niljson/commits/v0.0.1