const mixinafJson::JsonConverters
afJson::JsonConverters
@Js
(Service) - Converts Fantom objects to and from their JSON representation.
- defConvs
static Type:JsonConverter defConvs()The default set of JSON <-> Fantom converters.
- fromJson
abstract Obj? fromJson(Str? json, Type? fantomType)Converts a JSON string to the given Fantom type.
Returns
nullifjsonisnull.- fromJsonArray
abstract Obj?[]? fromJsonArray(Obj?[]? jsonArray, Type? fantomValType := null)Converts a list of JSON values to the given Fantom (non-list) type.
fromJsonList(list, MyEntity#)
Convenience for calling
fromJsonVal()with a cast.- fromJsonObj
abstract Obj? fromJsonObj([Str:Obj?]? jsonObj, Type? fantomType := null)Converts a JSON object to the given Fantom type.
Convenience for calling
fromJsonVal()with a cast.If
fantomTypeisnullthen the obj is inspected for a_typeproperty.- fromJsonVal
abstract Obj? fromJsonVal(Obj? jsonVal, Type? fantomType := null)Converts a JSON value to the given Fantom type.
If
fantomTypeisnullthen the obj is inspected for a_typeproperty, else a reasonable guess is made (and the optiondocToTypeFnis then called as a last resort.)jsonValis nullable so converters can choose whether or not to create empty lists and maps.- get
@Operator
abstract JsonConverter get(Type type)Returns the
Converterinstance used to convert the given type.- make
static new make([Type:JsonConverter]? converters := null, [Str:Obj?]? options := null)Returns a new
JsonConvertersinstance.If
convertersisnullthendefConvsis used. Some defaults are:makeEntityFn : |Type type, Field:Obj? fieldVals->Obj?| { BeanBuilder.build(type, vals) } makeJsonObjFn : |-> Str:Obj?| { Str:Obj?[:] { ordered = true } } fromJsonHookFn : |Obj? obj, JsonConverterCtx->Obj?| { obj } toJsonHookFn : |Obj? obj, JsonConverterCtx->Obj?| { obj } dateFormat : "YYYY-MM-DD" dateTimeFormat : "YYYY-MM-DD'T'hh:mm:ss.FFFz" strictMode : false propertyCache : JsonPropertyCache() pickleMode : false doNotWriteNulls : false encodeDecodeUris : true - set to false to use Uri.toStr / Str.toUriOverride
makeEntityFnto have IoC create entity instances.Hook fns are called before conversion takes place.
Date formats are used to serialise Date and Time objects.
Set
strictModetotrueto Err if the JSON contains unmapped data.Pickle Mode is where all non
@Transientfields are converted, regardless of any@JsonPropertyfacets. Data from@JsonPropertyfacets, however, is still honoured if defined.- normaliseKeyNamesFn
static |Obj?->Obj? normaliseKeyNamesFn()Returns a fn that normalises
.NETandsnake_casekey names into standard Fantom camelCase names..NET examples ------------- UniqueID --> uniqueId SWVersion --> swVersion MegaVERIndex --> megaVerIndex UtilITEMS.Rec --> utilItems.rec Snake_case examples ------------------- unique_id --> uniqueId sw_Version --> swVersion mega_VER_Index --> megaVerIndex
Use as a hook option:
converters := JsonConverters(null, [ "fromJsonHook" : JsonConverters.normaliseKeyNamesFn ])- toJson
abstract Str toJson(Obj? fantomObj, Obj? options := null)Converts the given Fantom object to its JSON string representation.
optionsis passed toJsonWriter, so may just betruefor pretty printing.- toJsonArray
abstract Obj?[]? toJsonArray(Obj?[]? fantomList)Deeply converts the given Fantom List to its JSON representation.
Convenience for calling
toJsonVal()with a cast.- toJsonObj
abstract [Str:Obj?]? toJsonObj(Obj? fantomObj)Converts the given Fantom object to its JSON object representation.
Convenience for calling
toJsonVal()with a cast.- toJsonVal
abstract Obj? toJsonVal(Obj? fantomObj, Type? fantomType := null)Converts the given Fantom object to its JSON representation.
fantomObjis nullable so converters can create empty / default objects.fantomTypein casefantomObjis null, but defaults tofantomObj?.typeof.- withOptions
abstract JsonConverters withOptions(Str:Obj? newOptions)Returns a new
JsonConverterswhose options are overridden with the given ones.