.Dd $Mdocdate: November 30 2022 $ .Dt CANONICALJSON 3 .Os Telodendria Project .Sh NAME .Nm CanonicalJson .Nd An extension of JSON that produces the Matrix spec's "canonical" JSON. .Sh SYNOPSIS .In CanonicalJson.h .Ft int .Fn CanonicalJsonEncode "HashMap *" "FILE *" .Ft char * .Fn CanonicalJsonEncodeToString "HashMap *" .Sh DESCRIPTION .Pp .Nm is an extension of .Xr Json 3 that is specifically designed to produce the Matrix specification's "canonical" JSON. .Pp Canonical JSON is defined as JSON that: .Bl -bullet -offset indent .It Does not have any unecessary whitespace. .It Has all object keys lexicographically sorted. .It Does not contain any floating point numerical values. .El .Pp The regular JSON encoder has no such rules, because normally they are not needed. However, Canonical JSON is needed to consistently sign JSON objects. .Pp .Fn CanonicalJsonEncode encodes a JSON object following the rules of Canonical Json. See the documentation for .Fn JsonEncode , documented in .Xr Json 3 for more details on how JSON encoding operates. This function exists as an alternative to .Fn JsonEncode , but should not be preferred to it in most circumstances. It is a lot more costly, as it must lexicographically sort all keys and strip out float values. If at all possible, use .Fn JsonEncode because it is much cheaper both in terms of memory and CPU time. .Pp .Fn CanonicalJsonEncodeToString encodes a JSON object to a string. .Xr Json 3 doesn't have any way to send JSON to a string, because there's absolutely no reason to handle JSON strings in most cases. However, the sole reason Canonical JSON exists is so that JSON objects can be signed in a consistent way. Thus, you need a string to pass to the signing function. .Sh RETURN VALUES .Pp .Fn CanonicalJsonEncode returns whether or not the JSON encoding operation was sucessful. This function will fail only if NULL was given for any parameter. Otherwise, if an invalid pointer is given, undefined behavior results. .Pp .Fn CanonicalJsonEncodeToString returns a C string containing the canonical JSON representation of the given object, or NULL if the encoding failed. .Sh SEE ALSO .Xr Json 3